2012-09-04 3 views
0

2 배치 파일이 있습니다.한 배치 파일에서 다른 배치 파일로 인수 전달

첫 번째는 상위 폴더의 경로 인 입력 인수가 필요합니다. 상위 폴더 내에있는 모든 하위 폴더의 이름을 읽고 각 하위 폴더에 대해 두 번째 배치 파일을 실행합니다.

배치 파일 1

@echo off 
for /d %%Y in (%1/*) do ( 
set SubfolderNameAndPath=%%Y 
call batch2.bat %SubfolderNameAndPath% 
) 

번째 배치 파일을 입력 인자로 SubfolderNameAndPath를 사용하고, 각 서브 폴더에있는 모든 파일에 대한 Evaluate.exe를 행한다. Evaluate.exe의 결과를 매번 액세스 된 하위 폴더의 이름을 포함하는 확장명을 가진 텍스트 파일 "결과"에 저장합니다. (results_%~n1.txt).

2

@echo off 
for %%X in (%1/*) do ( 
echo Evaluate.exe %%X AnotherArgumentHere -o results_%~n1.txt 
) 

나는 batch2.bat 전화를 보인다하더라도 batch1 (batch1.bat ParentFolderPath)를 실행 배치 파일은 batch2.bat이 실행되지 않습니다. 나는 batch2.bat에 대한 입력 인자를 정의하는 방식에 문제가 있음을 알았지 만 그것이 무엇인지 알 수는 없다.

%SubfolderNameAndPath%에는 공백이 없습니다. 폴더 경로가 아닙니다. 정말로 도움을 주셔서 감사합니다.

+1

마 '% SubfolderNameAndPath % '의 값은 이름이나 경로에 공백이 있습니까? – LittleBobbyTables

+0

@LittleBobbyTables 경로와'% SubfolderNameAndPath %'는 공백을 포함하지 않습니다. – athanell

답변

1

음, 처음에는 대괄호 안에 변수를 설정할 수 없으면 %로 액세스 할 수 있습니다. 먼저 (for 루프 전에) setlocal enabledelayedexpansion을 입력하고 % 대신 !의 변수에 액세스해야합니다.

어쨌든 %SubfolderNameAndPath%으로 아무 것도하지 않으므로 제거해야합니다.

둘째, 공백이 포함 된 경로를 보완해야하므로 잘하면 다음 코드를 참고하십시오. 이렇게하기 위해, batch는 전달 된 인자에 특별한 표기법을 사용하여 주위에 큰 따옴표를 제거합니다. 따라서 %1 = "This string" 인 경우 %~1 = This string입니다. 또한 %1 = This string 인 경우 %~1 여전히 = This string입니다. 따옴표를 사용하지 않으려면 %~1 표기법을 사용할 때 단점이 없습니다.

그래서, batch1.bat을 INT, 우리는 %1을 둘러싼 잠재적 따옴표를 제거하고 %~1/* 주위에 따옴표를 배치하고, 또한 따옴표 %%Y는 경우에 공백이있다.

@echo off 
for /d %%Y in ("%~1/*") do call batch2.bat "%%~Y" 

batch1.bat

그런 다음 우리는 batch2.bat에 대해 같은 일을하지만 더.

batch2.bat

@echo off 
for %%X in ("%~1/*") do (
    echo Evaluate.exe "%%~X" AnotherArgumentHere -o "results_%~n1.txt" 
) 

편집 : 2012년 9월 5일 15시 21분

방법이 잡아 당신입니까?대신 seprate 배치 호출하는 (. 위의 한 줄에 모두 넣을 수있다, 다만 괄호를 제거)

for /d %%x in (%1\*) do (
    for /f "tokens=*" %%y in ('dir /b /a:-d "%%~dpnxx"') do (
    echo Evaluate.exe %%~nxy AnotherArgumentHere -o "results_%%~nxx.txt" 
) 
) 

I 출력을 가정하고있어입니다 :
Evaluate.exe <file_name> AnotherArgumentHere -o "results_<directory_name>.txt"

+0

나는 당신이 제안한 것을 시도했다. 그러나 나는 마치 내가 전에 생각했던 것과 같은 상황에서 어떻게 든 나를 붙잡는다. 나의 모든 파일 이름과 (모든 파일들이었던) 모든 서브 폴더들은 공백이나 큰 따옴표를 사용하는 연산자를 포함하고 있지 않기 때문에 제 경우에는 필요하지 않습니다. 두 스크립트 모두 독립적으로 실행될 때 멋지게 실행됩니다. 하지만 첫 번째가 두 번째를 호출 할 때 여전히 무언가가 잘못되었습니다 .... – athanell

+0

OK, 나에게 샘플 디렉토리 컨텐츠와 생성하려고하는 라인의 샘플을 제공하십시오. –

+0

최근 수정 한 내용이 어떻게 적용됩니까? –

관련 문제