2017-04-02 1 views
0

배치 파일에 대한 기본적인 지식을 가지고 있으며 일반적으로 해결할 수 있지만 해결할 수없는 문제가 발생했습니다.두 번째 "call"문을 처리하기 전에 배치 파일 실행이 중지되는 이유는 무엇입니까?

배치 파일은 Windows 7 Ultimate 및 Windows 10 Professional 시스템에서 실행되며 대개 관련 데스크톱 아이콘을 클릭하기 만해도 일반적으로 스케줄러 프로그램에 의해 호출됩니다. 본질적으로, 배치 파일의 역할은 내 사례에서 내 보관 용 계정에있는 외부 텍스트 파일에 나열된 특정 파일 (TV 프로그램)을 다운로드하는 것입니다. 텍스트 파일 (TV.txt)의 각 항목에 대해 파일 이름을 지정 두 줄, 하나가 다른 목록의 ID :

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 

최초의 "전화"를 실행하지만, 일괄 작업이 두 번째 파일을 호출하기 전에 종료된다. 배치 작업이 종료 된 후, I는

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

This : http://stackoverflow.com/questions/14731877/a-bat-file-call-or-not-to-call-that-is-the _all 배치 파일 처리가 중지됩니다 (제어가 반환되지 않음). 호출자에게) 호출 된 배치 파일에 치명적인 구문 오류가있는 경우 ._ 따라서 완전히 종료 될 수있는 이유가있는 것으로 보입니다. 그 포스트가 제안한 것처럼'cmd/c'를 사용하면 어떨까요? –

+1

'get_iplayer'에 익숙하지 않아서'call get_iplayer'가 문제를 해결할 수 있다고 제안 하겠지만 좀 더 쉬운 응답을 게시 할 것입니다. – Magoo

+0

고마워요, 닉 .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이 무엇인지 잘 모릅니다.

여기서는 라인 내용이 번갈아 가며 변수 세트 id_names을 값 설정과 값을 설정하지 않음 (= 지워짐) 사이에서 전환하면 올바른 옵션으로 get_iplayer을 실행할 수 있습니다.

입력 파일의 각 줄에 pid 또는 get 옵션이있는 get_iplayer 코드가 실행되므로 문제가 발생할 수 있습니다.

+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

관련 문제