首次运行时未设置 Windows CMD 变量

问题描述 投票:0回答:1

我在 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.

第二次应该这么说。

如何修复该命令,使其第一次就能正确运行?

windows batch-file cmd environment-variables command-prompt
1个回答
0
投票

好的。在您的示例中,您发布了四行。但是,因为前两行以

&&
结尾,第四行以
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 命令相关站点中搜索“延迟扩展”术语。

© www.soinside.com 2019 - 2024. All rights reserved.