2014-04-01 2 views
2

부모 폴더 인 folder1에 박쥐 파일을 넣으려고합니다. run.bat이라는이 박쥐 파일은 모두 반복됩니다. 하위 폴더를 열고 child.bat이라는 bat 파일을 병렬로 호출하지만이 child.bat은 같은 폴더에있는 다른 파일에 액세스해야합니다. 예를 들어폴더 트리를 반복하고 하위 폴더의 bat 파일을 병렬로 실행 (하위 폴더의 파일에 액세스)

:

Folder1 (have run.bat) 
    | 
    |_______Folder2 
    |   | 
    |   |_______aa.txt 
    |   | 
    |   |_______child.bat 
    | 
    |_______Folder3 
      | 
      |_______bb.txt 
      | 
      |_______child.bat 

Folder2에 콘텐츠가 인 child.bat :

type aa.txt 

Folder3에 콘텐츠가 인 child.bat :

type bb.txt 

알아요 이미 질문이있다. 하위 폴더를 반복하는 방법 및 하위 폴더에서 박쥐 파일을 실행하는 방법에 대해 설명합니다. 하지만 제 질문은, 박쥐 파일은 같은 하위 폴더에있는 다른 파일에 액세스해야한다는 것입니다. 하위 폴더 (cd subfolder)를 입력하지 않으면 child.bat이 성공적으로 실행되지 않습니다. 다음은 내가 시도한 run.bat의 내용입니다.

@echo off 
for /d /r %%i in (*) do ( 
    cd %%i 
    start "%%i\child.bat" 
) 

그러나 실패했습니다.

아이디어가 있으십니까?

답변

0

의견에있는 추가 정보를 기반으로하면됩니다.

@echo off 
FOR /d /r %%i IN (*) DO (
    if exist "%%i\child.bat" start "" /d "%%i" "%comspec%" /c "child.bat" 
) 
+0

이 감사는 foxidrive. 그러나 튀어 나온 cmd 창은 매우 빨리 사라졌습니다. 새 cmd 창에서 child.bat에 대한 결과를 볼 수 없습니다. – Alex

+0

어떻게 실패했는지 설명해 주실 수 있습니까? 나는 그것이 효과가 없었던 이유가 궁금합니다. – foxidrive

+0

음. 스크립트를 실행할 때 창가가 튀어 나와서 매우 빨리 사라졌습니다. 동시에 주요 cmd 창에 결과가 표시되지 않습니다. – Alex

1

내 생각에 스크립트는 루프가 호출 된 곳과 동일한 위치에서 디렉터리를 일관되게 변경할 수 있어야합니다. (pushd을 통해) 현재 폴더를 저장하고 자식 호출 후에 복원하는 것은 (popd을 통해) 충분해야합니다.

@echo off 
FOR /d /r %%i IN (*) DO (
    pushd "%%i" 
    call "child.bat" 
    popd 
) 
+0

'존재한다면 "child.bat"call "child.bat"'<--- 이것은 더 나은 사용 행이 될 수 있습니다. – foxidrive

+0

감사합니다. 나는 그것이 작동한다고 말한다. 하지만 실제로는 제 경우에는 child.bat를 병렬로 호출해야합니다. 그래서 "시작"을 사용합니다. 시작을 사용하면 작동하지 않습니다. 은'/ D/R의 을 @echo %% 내가 IN (*) ( PUSHD "%% 내가" 시작 "child.bat" popd의 를) DO' – Alex

관련 문제