放入IF语句时,为什么以下批处理代码不起作用?

时间:2017-12-17 13:11:08

标签: batch-file

所以我有这个代码输出文件的文件大小,然后替换文件并再次检查大小:

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文件是否存在时它不会输出文件大小:

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)不遵循语法。

我无法弄清楚为什么会这样,以及如何解决这个问题。不要评判我,我是新手.-。

1 个答案:

答案 0 :(得分:0)

您正在更改并访问括号内的值。所以您需要delayed expansion

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

)