2017-04-02 57 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

相關問題