批处理文件 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
其中详细描述了 setlocal
和 endlocal
的实际作用。
环境变量 drone
和 counter
的当前值必须从被 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 /?
内置帮助不如参考答案详细,但仍应阅读。
我有下面的代码片段,它将一个变量输出到一个文本文件中。
%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
其中详细描述了 setlocal
和 endlocal
的实际作用。
环境变量 drone
和 counter
的当前值必须从被 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 /?
内置帮助不如参考答案详细,但仍应阅读。