2012-12-14 1 views
2

작성한 일괄 처리 스크립트에서 변수 할당에 이상한 동작이 나타납니다. 문제를 재현 할 수있는 가장 간단한 예가 다음과 같습니다.CMD.exe에 변수 값에 대한 예언이 있습니다.

F:\pos>pos.bat 
F:\pos>FOR /R ".\" %F IN (*.txt) DO (
echo Look: %F 
set file=%~dpF%~nF 
echo F:\pos\dir\file2 
) 

F:\pos>(
echo Look: F:\pos\file1.txt 
set file=F:\pos\file1 
echo F:\pos\dir\file2 
) 
Look: F:\pos\file1.txt 
F:\pos\dir\file2 

F:\pos>(
echo Look: F:\pos\dir\file2.txt 
set file=F:\pos\dir\file2 
echo F:\pos\dir\file2 
) 
Look: F:\pos\dir\file2.txt 
F:\pos\dir\file2 

Shouldn :

pos/ 
    |-pos.bat 
    |-file1.txt 
    |dir/ 
     |-file2.txt 

나는 다음과 같은 출력을 얻을 : 서브 디렉토리에 하나,

@echo on 
FOR /R ".\" %%F IN (*.txt) DO (
echo Look: %%F 
set file=%%~dpF%%~nF 
echo %file% 
) 

이 개 * .txt 인 파일이 들어있는 디렉토리에서 : 나는 파일 type pos.bat을 만들어 루프의 첫 번째 반복에서 %file%의 값이 F:\pos\file1.txt으로 다시 바뀝니 까? 또한, 나는`% file %의 값이 스크립트를 호출하는 사이에 전혀 유지되어야한다는 것에 놀랐다. I로 행동 스크립트에 첫 번째 호출 의도 :

F:\pos>FOR /R ".\" %F IN (*.txt) DO (
echo Look: %F 
set file=%~dpF%~nF 
echo 
) 

F:\pos>(
echo Look: F:\pos\file1.txt 
set file=F:\pos\file1 
echo 
) 
Look: F:\pos\file1.txt 
ECHO is on. 

F:\pos>(
echo Look: F:\pos\dir\file2.txt 
set file=F:\pos\dir\file2 
echo 
) 
Look: F:\pos\dir\file2.txt 
ECHO is on. 

그러나 모든 후속 호출은 나에게 쓰레기 결과를 제공합니다. 어떤 도움이라도 대단히 감사합니다.

답변

1

지연된 확장을 활성화 한 다음 루프 내의 변수에 !을 사용해야합니다. 루프

echo !file! 

에 대한 당신의 내 파일의 상단 (일반적으로)

SETLOCAL EnableDelayedExpansion 

에서

는 여기에 good resource을 왜 그리고 그런즉의.

+0

! 그 트릭을 했어! 감사. –

관련 문제