2016-12-19 1 views
0

디렉토리에서 파일 이름을 루프로 가져온 다음 파일 이름에 부분 문자열을 지정하여 처리하려고합니다. 그것을 작동 시키십시오.Windows 배치 파일 - 이동/루프 변수 가져 오기

나는 끈기있게 봤고 내가하고있는 일이 효과가 있다고 생각되지만 분명히 뭔가 빠져있다. %%A

setlocal ENABLEDELAYEDEXPANSION 
set files=*.* 
FOR %%A IN ("%files%") DO (
    echo %%A 
    Set MYVAR=%%A 
    echo MYVAR=%MYVAR% 
) 
pause 

echo가 잘 작동하지만 MYVAR은 항상 비어 - :

여기 내 코드입니다. 나는이 괄호를 추가하기 전에 더 일찍이 에서 일했다.

도와주세요. 나는 이미 너무 오래 머물러 있었고, 내 머리카락을 꺼내왔다.

+1

[지연 확장 (http://ss64.com/nt/delayedexpansion.html) – npocmaka

+0

감사합니다. 그것은 내가 사용할 필요가 있다는 것을 깨닫는 데 도움이되었다! – BFG

+0

[FOR 루프 내에서 환경 변수가 업데이트되지 않는 이유는 무엇입니까?] (http://stackoverflow.com/questions/40335392/why-are-environment-variables-not-updating-within-for-loop) – aschipfl

답변

0

아래 두 가지 방법 중 하나를 사용해보십시오.

어느 :

@Echo Off 
SetLocal EnableDelayedExpansion 
Set "files=*.*" 
For %%A In ("%files%") Do (
    Echo=%%A 
    Set "MYVAR=%%A" 
    Echo=MYVAR=!MYVAR! 
) 
Timeout -1 

또는 :

@Echo Off 
Set "files=*.*" 
For %%A In ("%files%") Do (
    Echo=%%A 
    Set "MYVAR=%%A" 
    Call Echo=MYVAR=%%MYVAR%% 
) 
Timeout -1 
+0

감사합니다. 사용! 대신 % 근무했습니다. 나는 타임 아웃 -1을 필요로하지 않는다. 그게 뭐야? – BFG

+0

''pause'를 사용했습니다.'timeout'은 좀 더 많은 컨트롤을 가진 유사한 명령입니다. 자세한 내용은'Timeout /? '을 입력하십시오. – Compo

+0

오, 알겠습니다. 감사. – BFG