【发布时间】:2017-01-18 13:12:50
【问题描述】:
我正在使用 Windows 的 cmd 并尝试在循环中设置一个变量。这是我的代码:
for /d %%a in ("F:\backup*") do set folder=%%a
ECHO %folder%
PAUSE
我想在驱动器 F 上查找名称以“备份”开头的文件夹,并将该文件夹的名称保存到 %folder% 变量中。因此,例如,如果文件夹名为“backup 2017-01-18”,我希望将其保存到 var。
相反,它似乎没有设置任何内容,因为 ECHO 只是打印“ECHO 已开启”。 for 循环是正确的,文件夹也在那里(我已经将这段代码用于其他带有 robocopy 的批处理)。
理论上,我可以将所有代码放入 FOR 循环中并使用 %%a 而不是 %folder% var,但这似乎是一个 hacky 解决方案。
到目前为止,我发现的所有解决方案都指向使用 EnableDelayedExpansion。我修改了代码以这样使用它:
Setlocal EnableDelayedExpansion
for /d %%a in ("F:\backup*") do set folder=%%a
ECHO !folder!
PAUSE
但现在 ECHO 打印“!文件夹!”好像它不会检测到变量。如果我恢复到 ECHO %folder%,我会再次得知“ECHO 已开启”。
编辑: 我在这里找到了问题。我还在备份文件夹上运行另一个批处理文件。事实证明,ROBOCOPY(我在该批次中使用)默认情况下将封闭文件夹设置为隐藏、系统和只读(即使复制的文件不是隐藏的或系统 o_0)。当我删除目录上的 HSR 属性时,此处发布的代码开始正常工作(初始版本)。
【问题讨论】:
-
这组代码是否在另一个代码块中?你的第一组代码对我来说就很好。
-
不,这是我手动运行的整个批处理文件。
-
那么 F:\backup* 不存在。
-
我发现了问题并编辑了我的帖子 - 这是因为 robocopy 在封闭文件夹上设置了隐藏、系统和只读标志 - 这阻止了我的 FOR 循环执行。
-
如果您找到了问题的答案,请将其添加为答案并接受(我认为您必须等待 2 天才能接受)。
标签: batch-file for-loop cmd set