2011-04-12 6 views
10

지금 당장은 다른 파일을 호출하고 실행 파일 (암호 및 파일 이름)을 실행해야하는 변수를 전달하는 배치 작업이 있습니다.디렉토리의 모든 파일을 일괄 처리합니다.

예는 :

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml -Dadmin.db.password=test123 

나는이 작업을 수행 작업을 썼다지만, 여러 개의 파일이있을 것이라는 점을 알아 냈다.

사용자 이름과 비밀번호는 변경되지 않지만 15 개의 다른 xml 파일의 경우 파일명이 다릅니다. 곧 추가 될 예정입니다.

파일은 항상 같은 폴더에 있습니다. 15-20 개의 작업 (각 파일마다 하나씩)으로 끝나는 대신,이 디렉토리에있는 각 파일을 처리 할 수있는 것을 작성할 수 있습니까? 다음 파일이 시작될 때까지 기다리거나 3 분간 수면을 추가 할 수 있습니다.

답변

30
pushd C:\test\utils 
for %%F in (F:\DB\*.xml) do (
    admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123 
) 
popd 

%%~dpnxFD 리브, P ATH베이스 N AME 전자 현재 파일의 X 장력을 확장한다.

그 루프에서 사용 환경 변수 (%foo%)를 설정하려는 경우

, 당신은 곤경에 도착하기 전에 먼저 help set를 참조하십시오.

+0

굉장합니다. 이 기능을 사용하여 필요한 것을 얻을 수 있습니다. 감사. – Gabriel

+0

'for' 루프 안에서'set'을 사용하는 것을 피하는 * 방법을 설명 할 수 있습니까? – Snekse

+0

Snekse, 마법의 단어가 * 지연 변수 확장 *입니다. 내가 제시 한 모든 배치 파일에 대해 설명해야 할 내용입니다. 'help set '에서도 잘 설명되어 있습니다. – Joey

0
for file in f:\DB\* 
do 
    admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123 
done 
+0

Windows 배치에 해당하지 않습니다. !!!! – kokbira

7

for 명령을 사용할 수 있습니다. 배치 파일에서 이런 식으로 뭔가 :

for %%f in (*.xml) do call myotherbatch.bat %%f 

실행중인 admin 명령은 작업이 완료 될 때까지 위의 루프가 순차적으로 처리 할 반환하지 않습니다 가정.

프롬프트에서 명령을 실행하면 (배치 파일과 반대) 단일 % 만 사용하십시오.

관련 문제