Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 批处理文件ENABLEDELAYEDEXPANSION未写入变量_Loops_Batch File_Cmd_Counter_Delayedvariableexpansion - Fatal编程技术网

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
之后,结果变量可能具有不同的值,即使它们以
%显示