我正在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. ) )
字符串
第1次执行输出:
The "%subfolder%" subfolder already exists.
型
这个输出是错误的。子文件夹不存在,因为尚未创建。为什么变量不被展开?
第二次执行输出:
Created the "new" subfolder.
型
第一次就应该这么写。
第3次执行输出:
The "new" subfolder already exists.
型
第二次就该这么说。
如何修复命令,使其第一次正确运行?
2条答案
按热度按时间ego6inou1#
好的。在你的例子中,你贴了 * 四行 *。然而,因为前两行以
&&
结尾,第四行以ELSE
开头(这不是一个有效的命令),我假设你的例子是 * 真的 * 一行...如果是这样的话,那么你的代码就可以工作了,如果你只是把它分成两行 * 分开 *:
字符串
如果您想知道此更改的原因,那么您应该在此或任何其他与cmd.exe命令相关的站点中搜索“延迟扩展”术语。简要总结如下:
你不能在同一行中定义一个变量并%expand% it。为此,您需要启用延迟扩展,并使用感叹号而不是百分号来扩展同一行中已更改的
!variable!
值。7vux5j2d2#
可以使用for参数来使用变量的更新值。在下面的代码中,我将文件夹/子文件夹名称缩短为“A”和“B”。
字符串
相同,但现在分为4行,以提高可读性。
注意:下面的代码将失败,代码属于一行可运行!
型
此代码最接近海报的原始代码。
但是这段代码可以通过省略所有的set/for/if来简化,只用于参数。
rem下一个变体使用forparams括在double quot's中
型
rem下一个变体使用forparams不包含在双引号中
型