我在 Windows 10 命令提示符下使用此命令来检查文件夹是否存在,如果不存在,则创建它。奇怪的是,它在我第一次输入时不起作用,但第二次、第三次等等却起作用,就好像变量值在我第一次运行它时没有更新一样。
set "folder=C:\Users\%USERNAME%\Desktop\New folder" &&
set "subfolder=new" &&
( IF exist "%folder%\%subfolder%" ( echo The "%subfolder%" subfolder already exists. )
ELSE ( mkdir "%folder%\%subfolder%" && echo Created the "%subfolder%" subfolder. ) )
第一次执行输出:
The "%subfolder%" subfolder already exists.
输出是错误的。该子文件夹不存在,因为尚未创建。为什么变量没有扩展?
第二次执行输出:
Created the "new" subfolder.
这是第一次应该说的话。
第三次执行输出:
The "new" subfolder already exists.
第二次应该这么说。
如何修复该命令,使其第一次就能正确运行?
好的。在您的示例中,您发布了四行。但是,因为前两行以
&&
结尾,第四行以 ELSE
开头(这不是有效的命令),所以我假设你的示例是真的很长的一行...
如果是这样,那么只要将代码分成这些单独的行即可工作:
set "folder=C:\Users\%USERNAME%\Desktop\New folder"
set "subfolder=new"
IF exist "%folder%\%subfolder%" (
echo The "%subfolder%" subfolder already exists.
) ELSE (
mkdir "%folder%\%subfolder%" && echo Created the "%subfolder%" subfolder.
)
如果你坚持只在一行长中使用你的代码,那么你应该将其更改为这一行:
set "folder=C:\Users\%USERNAME%\Desktop\New folder" && set "subfolder=new" && ( IF exist "!folder!\!subfolder!" ( echo The "!subfolder!" subfolder already exists. ) ELSE ( mkdir "!folder!\!subfolder!" && echo Created the "!subfolder!" subfolder. ) )
...并在代码开头插入
setlocal EnableDelayedExpansion
命令。
如果您想了解此更改的原因,那么您应该在此或任何其他 cmd.exe 命令相关站点中搜索“延迟扩展”术语。