批处理文件 ENABLEDELAYEDEXPANSION 没有写出变量

Batch file ENABLEDELAYEDEXPANSION is not writing variables out

我有下面的代码片段,它将一个变量输出到一个文本文件中。 %drone% 将是一个简单的文本字符串,%counter% 是一个循环计数迭代的数字。

echo %drone% !counter! 将正确的值回显到屏幕,但在 echo Done: %drone% Files deleted: !tempcounter! >> clearTempFilesonDrones.txt 代码中,!tempcounter! 变量在输出到文件时为空。

我尝试将其设置为临时变量并使用 %tempvariable%,但没有成功。我也试过 "!counter!" 以防它认为这是一个字符串而不是数字,但也没有用。

echo %drone% %counter%
endlocal

echo Done: %drone% Files deleted: !counter! >> clearTempFilesonDrones.txt

有什么想法吗?

我无法将整个代码复制到 pastebin 等,因为当前客户端被阻止了,所以只上传了一个摘录。

你的 endlocal 结束了延迟扩展,这意味着你不能使用 !之后的变量不再。尝试简单地使用

echo Done: %drone% Files deleted: %counter% >> clearTempFilesonDrones.txt

请注意,在代码块中首先使用 !temp! 访问的变量可以在之后使用常规 %temp% 访问

如果这不起作用,我建议尝试删除 endlocal,或将其放在最后一个 echo 下方的一行中。

看起来 setlocal 的行为没有或有 1 个或 2 个可选的 4 个参数和 endlocal 您并不真正了解。

上查看答案
  • Echoing a URL in Batch

其中详细描述了 setlocalendlocal 的实际作用。

环境变量 dronecounter 的当前值必须从被 endlocal 删除的当前环境变量 table 传递给恢复的环境变量 table 在 setlocal 之前活跃,在 endlocal 之后再次活跃。

这可以按如下方式完成:

echo %drone% %counter%
endlocal & set "drone=%drone%" & set "counter=%counter%"

echo Done: %drone% Files deleted: %counter% >>clearTempFilesonDrones.txt

带有命令 endlocal 和两个 set 命令的整个命令行首先由 Windows 命令处理器使用当前环境变量的值进行预处理,从而替换变量引用由他们的当前值。所以该行是预处理后的:

endlocal & set "drone=value of drone variable" & set "counter=counter value"

现在首先执行 endlocal,丢弃当前环境变量 table 并恢复以前的环境变量 table。然后执行两个 set 命令,将两个字符串分配给现在活动环境变量 table.

中的两个变量

有关运算符 & 的解释,请参阅 Single line with multiple commands using Windows batch file 上的答案。

此外,我建议打开命令提示符 window,在那里执行以下命令,并非常仔细地完整阅读每个命令显示的所有帮助页面。

  • endlocal /?
  • set /?
  • setlocal /?

内置帮助不如参考答案详细,但仍应阅读。