2017-12-17 6 views
1

그래서 내가 출력이 코드를 파일의 파일 크기를 가지고, 다음 파일을 교체하고 다시 크기를 확인 :IF 문을 넣을 때 다음 배치 코드가 작동하지 않는 이유는 무엇입니까?

FOR %%A IN (%userprofile%\remove.me) DO (
    set size=%%~zA 
) 
pause 
echo before:%size% 
copy %userprofile%\copy.me %userprofile%\remove.me 
pause 
FOR %%B IN (%userprofile%\remove.me) DO (
    set size2=%%~zB 
) 
pause 
echo after:%size2% 
pause 
exit 

을 그것은 완벽하게 잘 작동하지만 난 remove.me 파일이 존재하는지 확인하려고 할 때 코드를 실행하기 전에 늘 출력 filesizes :

if EXIST %userprofile%\remove.me (
FOR %%A IN (%userprofile%\remove.me) DO (
    set size=%%~zA 
) 
pause 
echo before:%size% 
copy %userprofile%\copy.me %userprofile%\remove.me 
pause 
FOR %%B IN (%userprofile%\remove.me) DO (
    set size2=%%~zB 
) 
pause 
echo after:%size2% 
pause 
exit 
) 

그냥 말할 것이다

전에 :

후 :

파일 크기가 없습니다. if 문으로 실행되는 코드 안의 대괄호를 이스케이프하면 해당 구문을 따르지 않습니다 (C : \ Users \ Myaccountname \ remove.me) 만 반환됩니다.

왜 이런 일이 일어나고 있으며 어떻게 수정해야하는지 알 수 없습니다. 나를 판단하지 말고, 새로운 일괄 처리 .-. 당신은 변화하고 괄호 안에 값에 액세스하는

+0

delayed expansion은'만약 존재 "% USERPROFILE % \ remove.me"'과'FOR %% A의 ("%의 사용자 프로필과 노력이 필요 context.So % \ remove.me ") – npocmaka

+0

@npocmaka nothing changed :/ – Temm

+0

지연 확장이 필요합니다. – npocmaka

답변

0

setlocal enableDelayedExpansion 
if EXIST "%userprofile%\remove.me" (
    FOR %%A IN ("%userprofile%\remove.me") DO (
     set size=%%~zA 
    ) 
    pause 
    echo before:!size! 
    copy "%userprofile%\copy.me" "%userprofile%\remove.me" 
    pause 
    FOR %%B IN ("%userprofile%\remove.me") DO (
     set size2=%%~zB 
    ) 
    pause 
    echo after:!size2! 
    pause 
    exit 

) 
+0

이 코드를 사용하면 "setlocal enableDelayedExpansion"을 실행 한 후 일괄 처리 콘솔이 즉시 닫힙니다./ – Temm

+0

@Temm - 지금 확인하십시오. accidend에 의해 마지막 닫는 괄호를 코드 블록 외부에 두었습니다. – npocmaka