Batch file 关于「;呼叫回声!行:%%foo%%=bar&引用;
我在bat文件中使用的代码旨在将变量Batch file 关于「;呼叫回声!行:%%foo%%=bar&引用;,batch-file,Batch File,我在bat文件中使用的代码旨在将变量%foo%值替换为bar。 但它可以将%foo%视为文字%符号。结果与命令echo相同!行:%%foo%%=bar(withtout调用)没有。调用命令不起作用。 我想知道为什么它不能像callecho%%foo%%那样工作,以便callecho在从bat文件读取命令行后解析%foo%%值。由于解析器阶段的顺序,它不能工作 执行示例 for .... do ( call echo !line:%%foo%%=bar! ) 第一阶段是百分比扩展阶段。
%foo%
值替换为bar。但它可以将
%foo%
视为文字%
符号。结果与命令echo相同!行:%%foo%%=bar代码>(withtout调用)没有。调用
命令不起作用。
我想知道为什么它不能像callecho%%foo%%
那样工作,以便callecho
在从bat文件读取命令行后解析%foo%%
值。由于解析器阶段的顺序,它不能工作
执行示例
for .... do (
call echo !line:%%foo%%=bar!
)
第一阶段是百分比扩展阶段。
在括号块中使用它不会改变这种行为。
所以你得到了
呼叫回声!行:%foo%=bar代码>
然后开始执行块,如果行被执行,则下一个相关阶段是延迟扩展阶段,%foo%
将被替换,而不是内容,因此您得到
呼叫回声内容xxx#条#
现在,调用使用扩展百分比重新启动解析器,但不再有扩展百分比
我假设foo
的内容可以在FOR循环中更改,因此您需要随时扩展它,而不是在解析块时仅扩展一次
即使您避开感叹号,以便在调用后首先启用它们,它也无法工作,因为延迟扩展在调用执行内部不起作用
但是您可以使用它,因为FOR变量展开阶段正好在延迟展开阶段之前
set foo=xxx
set line=Content xxx # %%foo%% #
关于解析器阶段的一些解释位于由于解析器阶段的顺序,它无法工作
执行示例
for .... do (
call echo !line:%%foo%%=bar!
)
第一阶段是百分比扩展阶段。
在括号块中使用它不会改变这种行为。
所以你得到了
呼叫回声!行:%foo%=bar代码>
然后开始执行块,如果行被执行,则下一个相关阶段是延迟扩展阶段,%foo%
将被替换,而不是内容,因此您得到
呼叫回声内容xxx#条#
现在,调用使用扩展百分比重新启动解析器,但不再有扩展百分比
我假设foo
的内容可以在FOR循环中更改,因此您需要随时扩展它,而不是在解析块时仅扩展一次
即使您避开感叹号,以便在调用后首先启用它们,它也无法工作,因为延迟扩展在调用执行内部不起作用
但是您可以使用它,因为FOR变量展开阶段正好在延迟展开阶段之前
set foo=xxx
set line=Content xxx # %%foo%% #
关于解析器阶段的一些解释见谢谢@jeb,我现在知道了。因为我省略了“!”感叹号解析的运行优先级。我通过电话找到了解决办法:标签!福!,在发布此问题之前使用%1参数引用。:)谢谢@jeb,我现在拿到了。因为我省略了“!”感叹号解析的运行优先级。我通过电话找到了解决办法:标签!福!,在发布此问题之前使用%1参数引用。:)