2017-04-02 60 views
0

我已经批处理文件一个相当基本的知识,通常设法得到通过,但是击中我解决不了问题。为什么在处理第二个“调用”语句之前批处理文件执行停止?

下的批处理文件在Windows 7旗舰版和Windows 10专业版系统上运行,通常由一个调度程序调用,虽然有时我只需点击相关的桌面图标。从本质上讲,该批处理文件的作用是下载它们在外部文本文件中列出的,在我的情况下,特定的文件(电视节目),位于我的Dropbox帐户。在文本文件(TV.txt)每个项目有两条线,一个命名的文件,其他上市公司编号:

name1 
ID1 
name2 
ID2 
name3 
ID3 

下的批处理文件相继通过在文本文件中列出的项目工作,一个文件在“ID”上工作,第二个在“名称”上工作。

的 “标识” 文件(TV-pid.cmd)由以下部分组成:

set $textFile="D:\Dropbox\Get_iPlayer\0-TVdl\tv.txt" 
for /f "delims=" %%a in ('type %$textFile%') do get_iplayer --pid %%a 

的 “名” 的文件(TV-nopid.cmd)由以下部分组成:

set $textFile="D:\Dropbox\Get_iPlayer\0-TVdl\tv.txt" 
for /f "delims=" %%a in ('type %$textFile%') do get_iplayer --get %%a 

每个批处理文件效果很好自身,问题是当我尝试将二者结合成一个单一的批处理文件。

如果创建一个“组合”批处理文件(tv.cmd):

call tv-pid.cmd 
call tv-nopid.cmd 

第一“呼叫”被执行,但在调用第二个文件之前,批处理操作终止。

同样如果我创建一个“组合”批处理文件(不使用“呼叫”命令)

set $textFile="D:\Dropbox\Get_iPlayer\0-TVdl\tv.txt" 
for /f "delims=" %%a in ('type %$textFile%') do get_iplayer --pid %%a 
set $textFile="D:\Dropbox\Get_iPlayer\0-TVdl\tv.txt" 
for /f "delims=" %%a in ('type %$textFile%') do get_iplayer --get %%a 

同样的情况,其间歇操作终止之后,执行第2行的下载活动。

个人而言,我宁愿基础上的“呼叫”命令的解决方案,但我不介意。

+3

这个:http://stackoverflow.com/questions/14731877/a-bat-file-call-or-not-to-call-that-is-the说_all批处理文件处理将停止(控制将不会返回到调用者)如果CALLed批处理文件有一个致命的语法错误。所以看起来有可能完全退出的原因。如果您按照该帖子的建议使用'cmd/c',该怎么办? –

+1

由于我不熟悉'get_iplayer',我建议'呼叫get_iplayer'可以解决这个问题,但我会后这可能是更容易还是一个较长的响应。 – Magoo

+0

谢谢Nick.McDermaid,问题排序!它现在工作了! – user338034

回答

3
set $textFile="D:\Dropbox\Get_iPlayer\0-TVdl\tv.txt" 
set "idnames=" 
for /f "delims=" %%a in ('type %$textFile%') do (
if defined id_names (
    set "id_names=" 
    call get_iplayer --pid %%a 
) else (
    set "id_names=Y" 
    call get_iplayer --get %%a 
) 

这可能有效。我不知道get_iplayer是或不是。

这里的想法是,行内容交替出现,因此在set-to-a-value和set-to-no-value(= cleared)之间切换id_names变量允许我们使用正确的选项执行get_iplayer

请注意,对于输入文件的每一行,您的代码将执行get_iplayer,选项为pidget - 这可能会导致问题。

+0

Magoo,我有名字和PID执行的具体原因,我不会在这里进行。在任何情况下,在第一次“调用”之后,批处理操作终止,并且它永远不会像第二次“调用”那么远。但我感谢你的迅速回应。谢谢。 – user338034

+0

也许你可以使用'start'“get_iplayer ...' - 这会将每个'get_iplayer'实例设置为它自己的独立作业。这里的http://stackoverflow.com/questions/43060025/is-there-a-more-efficient-way-to-watermark-and-join-videos-in-bulk-through-ffmpe/43064770#43064770关于如何参考限制并行操作的数量。 – Magoo

相关问题