Loops 批处理文件ENABLEDELAYEDEXPANSION未写入变量
我有下面的代码片段,它将变量输出到文本文件中。Loops 批处理文件ENABLEDELAYEDEXPANSION未写入变量,loops,batch-file,cmd,counter,delayedvariableexpansion,Loops,Batch File,Cmd,Counter,Delayedvariableexpansion,我有下面的代码片段,它将变量输出到文本文件中。 %drone%将是一个简单的文本字符串,%counter%是一个循环中用于计算迭代次数的数字 echo%drone%!柜台将正确的值回显到屏幕上,但在回显完成:%drone%文件已删除:!临时计数器!>>clearTempFilesonDrones.txt编码!临时计数器变量输出到文件时为空 我尝试将其设置为临时变量并使用%tempvariable%,但没有成功。我还试着像“!counter!”那样,以防它认为那是一个字符串而不仅仅是一个数字,但也
%drone%
将是一个简单的文本字符串,%counter%
是一个循环中用于计算迭代次数的数字
echo%drone%!柜台代码>将正确的值回显到屏幕上,但在回显完成:%drone%文件已删除:!临时计数器!>>clearTempFilesonDrones.txt
编码!临时计数器代码>变量输出到文件时为空
我尝试将其设置为临时变量并使用%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%
访问
如果这不起作用,我建议尝试删除endlocal
,或将其放置在最后一个回显下方的一行中。您的endlocal结束延迟的扩展,这意味着您无法使用!以后再也没有了。试着简单地使用
echo Done: %drone% Files deleted: %counter% >> clearTempFilesonDrones.txt
请注意,首先使用访问的变量!临时工代码块中的代码>可以在以后使用常规%temp%
访问
如果这不起作用,我建议尝试删除endlocal
,或将其放置在最后一个回音下方的一行中。它看起来像是setlocal
的行为,没有或有可选的4个参数中的1个或2个,并且endlocal
您实际上并不知道
请参阅上的答案
详细描述了setlocal
和endlocal
的实际功能
必须将环境变量的当前值drone
和counter
从当前环境变量表中通过endlocal
删除,传递到恢复的环境变量表中,该表在setlocal
之前处于活动状态,在endlocal
之后再次处于活动状态
这可以通过以下方式完成:
echo %drone% %counter%
endlocal & set "drone=%drone%" & set "counter=%counter%"
echo Done: %drone% Files deleted: %counter% >>clearTempFilesonDrones.txt
Windows command processor首先使用当前环境变量的值对包含命令endlocal
和两个set
命令的整个命令行进行预处理,从而将变量引用替换为其当前值。因此,该行在预处理之后:
endlocal & set "drone=value of drone variable" & set "counter=counter value"
现在首先执行endlocal
,丢弃当前环境变量表并恢复以前的环境变量表。然后执行两个set
命令,将两个字符串分配给现在处于活动状态的环境变量表中的两个变量
有关操作员和的说明,请参阅上的答案
此外,我建议打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
endlocal/?
设置/?
setlocal/?
内置帮助没有参考答案那么详细,但是应该阅读。它看起来像是setlocal
的行为,没有或有可选的4个参数中的1个或2个,并且endlocal
您并不真正了解
请参阅上的答案
详细描述了setlocal
和endlocal
的实际功能
必须将环境变量的当前值drone
和counter
从当前环境变量表中通过endlocal
删除,传递到恢复的环境变量表中,该表在setlocal
之前处于活动状态,在endlocal
之后再次处于活动状态
这可以通过以下方式完成:
echo %drone% %counter%
endlocal & set "drone=%drone%" & set "counter=%counter%"
echo Done: %drone% Files deleted: %counter% >>clearTempFilesonDrones.txt
Windows command processor首先使用当前环境变量的值对包含命令endlocal
和两个set
命令的整个命令行进行预处理,从而将变量引用替换为其当前值。因此,该行在预处理之后:
endlocal & set "drone=value of drone variable" & set "counter=counter value"
现在首先执行endlocal
,丢弃当前环境变量表并恢复以前的环境变量表。然后执行两个set
命令,将两个字符串分配给现在处于活动状态的环境变量表中的两个变量
有关操作员和的说明,请参阅上的答案
此外,我建议打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
endlocal/?
设置/?
setlocal/?
内置帮助没有参考答案详细,但仍应阅读。注意,endlocal
还删除自上一次setlocal
以来修改的所有变量;这意味着在endlocal
之后,结果变量可能有不同的值,即使它们是用%
而不是显示的
。尝试了此操作但未成功,还尝试在下一行使用endlocal。我的问题实际上是错误的,因为我在脚本末尾有endlocal
,而不是在前面。请注意endlocal
还删除了自上一个setlocal
以来修改的所有变量;这意味着在endlocal
之后,结果变量可能具有不同的值,即使它们以%显示