2016-09-15 3 views
0

I의 구조는 다음과 같습니다, 하위 폴더에 여러 개의 배치 파일을 실행

E: 
    parent 
    subfolder1 contains mybatch.bat 
    subfolder2 contains mybatch.bat 
    .... 
    subfoldern contains mybatch.bat 

폴더의 수는 동적이며, 이름, 폴더 이름은 현재 날짜의 타임 스탬프를 포함 매일 알 수 .

는 이제 mybatch.bat은 내가 각 하위 폴더 내부에서 모든 "mybatch.bat"를 실행하려면이

mkdir temp 

포함 가정 해 봅시다. 각 하위 폴더로 이동하여 mybatch.bat를 수동으로 실행하면 모든 항목이 올바르게 작동하고 "temp"라는 폴더가 하위 폴더에 만들어집니다.

내가 원하는 것은 각 폴더 안에있는 모든 mybatch.bat를 실행하는 배치 파일입니다. 따라서 각 하위 폴더에 "temp"폴더가 만들어집니다. 나는이

cd E:\parent 
for /f %%f in ('dir /ad /b') do start %~dp0%%f\mybatch.bat 

문제가 내가 얇은 실행할 때 임시 폴더가 상위 폴더에 생성된다는 점이다 시도하고, 아무것도 하위 폴더에 만들어지지 않습니다. 코드가 제대로 코멘트에 맞지 않을 수 있기 때문에 나는 도움을 나는 유일한 해결책으로이를 게시하고

감사

+0

상대 경로로주의하십시오! 'dir/ad/b'는 현재 작업 디렉토리에서 (경로가 지정되지 않았으므로) 검색하지만,이 배치 파일의 상위 디렉토리 인'% ~ dp0'을 사용하고 있습니다. 이 tweo 위치가 동일하다면 모든 것이 정상이지만 서로 다르게되면 이상한 문제가 발생할 것입니다. 실제로 'start' 대신'call'을 사용하십시오. 배치 파일을 동시에 ... – aschipfl

답변

2

을 주셔서 감사합니다. 어때?

@echo off 
setlocal enabledelayedexpansion 

set _ROOT="E:\parent" 

for /f "tokens=*" %%f in ('dir /ad /b !_ROOT!') do (
    pushd "!_ROOT:"=!\%%f" 
    call a.bat 
    popd 
) 

EDIT0 @

  • 가 파일
  • .bat를 내부 실행시 callstart 의해 대체 SPACE S를 포함하는 하위 디렉토리에 대한 지원을 추가했다.
+0

고마워, 그 일했다. 그러나 모든 mybatch.bat cmd 창은 프로세스를 완료 한 후에도 열린 상태로 유지됩니다. 결국 그들을 추가하기 위해 무엇을 추가해야합니까? – Alaeddin

+0

'start'를 삭제하면 ... – geisterfurz007

+1

'call a.bat'는 하나의 배치 파일을 다른 것으로 시작합니다; 병렬로 실행하려면'start ""cmd/C a.bat'; 비록 OP가 무엇을 원하는지 확실하지 않습니다 ... – aschipfl

관련 문제