0

我有下面的代码片段,它将一个变量输出到一个文本文件中。 %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 或类似文件中,因此只需上传一个提取物。

4

2 回答 2

2

您的 endlocal 结束了延迟的扩展,这意味着您不能使用!以后变数了。尝试简单地使用

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

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

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

于 2016-08-29T13:40:22.743 回答
1

它看起来像是setlocal不带或不带可选 4 个参数中的 1 个或 2 个的行为,并且endlocal您并不真正了解。

看答案

它用例子详细描述了做什么setlocalendlocal真正做什么。

环境变量的当前值dronecounter必须从删除的当前环境变量表传递endlocal到恢复的环境变量表在活动之前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执行丢弃当前环境变量表并恢复以前的环境变量表。然后执行两个set命令,将两个字符串分配给现在活动的环境变量表中的两个变量。

有关操作员的说明,&请参阅Single line with multiple commands using Windows batch file的答案。

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

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

内置帮助没有参考答案那么详细,但仍应阅读。

于 2016-08-29T15:08:37.240 回答