【发布时间】:2020-10-20 00:04:40
【问题描述】:
我将把我的整体问题归结为一个非常简单的问题。如何在批处理文件的 for 循环中分配变量?
如果我在 windows 中使用以下批处理文件:
for %%f in (.\Update\!dos\*.zip) do (
echo %%f
set FileName3=%%f
echo %FileName3%
pause
)
echo 将是 %%f 的正确值,但 echoes 对 %FileName3% 没有任何意义
然后我通过直接为FileName3 分配像test 这样的直接值来测试它,但失败了。
在寻找解决方案时,常用的指针是SETLOCAL enabledelayedexpansion
但是,如果我将它添加到批处理文件的顶部,它就会停止运行。因此,虽然我认为这可能是解决方案的一部分,但无法运行批处理文件进行测试,但我无法确定。
需要明确的是,SETLOCAL enabledelayedexpansion 在我的批处理文件的顶部,如果我双击该文件没有任何反应。如果我从命令行运行它,它只是回到提示符,就好像什么都没发生一样。
所以我的问题是,如何在批处理文件的循环中分配变量?如果答案是使用SETLOCAL enabledelayedexpansion,那么为什么要将它添加到我的批处理文件中导致它什么都不做。
【问题讨论】:
-
这能回答你的问题吗? Weird scope issue in .bat file
-
缺少实际的minimal reproducible example 不可能说出您的批处理文件有什么问题。
setlocal命令没有理由终止您的批处理文件。但是,您确实需要确保正确使用变量,即使用!而不是%来分隔要参与延迟扩展的变量。有关您应该需要的所有信息,请参阅建议的副本和许多其他信息。
标签: batch-file