변수가 일정하지 않으므로 확장 지연 변수를 활성화해야합니다. 여기서는 변수 file
의 확장이 지연되어야합니다.
지연된 확장이 옵션은 SETLOCAL
명령으로 설정되어, 변수가 실행시보다는 구문 분석시에 확장하게됩니다. 지연 확장 효과 변수 인 경우
통상, FOR
루프가 전체 FOR
작업시 변수 확장 종종 유용 지연 (통상 %variable_name%
이외에) !variable_name!
를 사용하여 참조 될 수있다 루프는 배치 스크립트의 여러 행에 걸쳐 있더라도 단일 명령으로 평가됩니다. 이것은 FOR
루프의 기본 동작입니다 :
예 :
@echo off
setlocal
:: count to 5 storing the results in a variable
set _tst=0
FOR /l %%G in (1,1,5) Do (echo [%_tst%] & set /a _tst+=1)
echo Total = %_tst%
C:\> demo_batch.cmd
[0]
[0]
[0]
[0]
[0]
Total = 5
주의 그 FOR
루프 마감은 우리가 올바른 총을 얻을 수 있기 때문에 변수가 올바르게 증가하지만 루프의 반복마다 변수가 0의 초기 값에서 멈춤.
EnableDelayedExpansion
와 같은 스크립트는 같은 최종 결과를 제공 할뿐만 아니라 중간 값을 표시
@echo off
setlocal EnableDelayedExpansion
:: count to 5 storing the results in a variable
set _tst=0
FOR /l %%G in (1,1,5) Do (echo [!_tst!] & set /a _tst+=1)
echo Total = %_tst%
C:\> demo_batch.cmd
[0]
[1]
[2]
[3]
[4]
Total = 5
공지 사항을 그 루프에 대한 우리가 !variable!
대신 %variable%
를 사용하여 내.
그리고 당신의 배치 스크립트는 그런 식으로 쓸 수있다 :
@echo off
Set "Ext=*.gpg"
set /a Count=0
Setlocal EnableDelayedExpansion
for %%F in ("q:\%Ext%") do (
SET /a Count+=1
set "file=%%~nxF"
echo Done copying file [!Count!] : !file!
)
SET /a "COUNT_TOT=%Count%"
ECHO.
ECHO Total of [%EXT%] files(s) : %Count% file(s)
pause
먼저해야 그룹 모두 당신의 명령 : 모두 각각'for' 반복에 의해 실행'set'와'같은 블록에 if'는 (할). 둘째, [Delayed Expansion] (http://ss64.com/nt/delayedexpansion.html) 문제 인 것 같습니다. [이 게시물] (http://stackoverflow.com/questions/10558316/example-of-delayed-expansion-in-batch-file) 또는 [this one] (http://stackoverflow.com/questions/22278456/)을 확인하십시오. 활성화 및 비활성화 지연 확장 - 할 일할 일) (또는 _Google_-ing에서 공개 한 수많은 사람들). – CristiFati