For loop 如何从';命令';用于/F?
在启用延迟扩展的情况下,如何转义作为FOR/F命令参数的命令内的感叹号,如For loop 如何从';命令';用于/F?,for-loop,cmd,escaping,For Loop,Cmd,Escaping,在启用延迟扩展的情况下,如何转义作为FOR/F命令参数的命令内的感叹号,如 set FOO=BAR setlocal enabledelayedexpansion rem non-quoted variable for /F %L in ('echo !FOO!') do echo %L endlocal 或 要分别返回条或条? 不幸的是,它被扩展为!福或“!FOO!” 当使用即时扩展(意思是%FOO%或%FOO%“)时,我得到了我想要的 我试着使用^,^^,,…,还与“usebackq”选项
set FOO=BAR
setlocal enabledelayedexpansion
rem non-quoted variable
for /F %L in ('echo !FOO!') do echo %L
endlocal
或
要分别返回条
或条
?
不幸的是,它被扩展为!福代码>或“!FOO!”
当使用即时扩展(意思是%FOO%
或%FOO%“
)时,我得到了我想要的
我试着使用^代码>,^^代码>,
,…,还与“usebackq”选项(`echo`
)一起使用,但没有成功。
即使在第一个echo
之前使用call
命令也不会成功
您能帮助我吗?根据所使用的语法(%L
)您正在命令行中运行它,并且在此上下文中,命令setlocal enabledelayedexpansion
无效。如果阅读setlocal/?
,您将看到此命令用于批处理文件
所以,真正的问题是!福由于延迟扩展未激活(默认的cmd
配置),代码>被解析为文本
如何从命令行执行此操作?为cmd
实例启用延迟扩展
set "FOO=bar"
cmd /v /c"for /F %L in ('echo !FOO!') do echo %L"
请注意,的扩展!福
变量是在cmd/v/c
实例中执行的,而不是在开始执行echo
命令的cmd
实例中执行的。根据所使用的语法(%L
)您在命令行中运行它,并且在该上下文中,命令setlocal enabledelayedexpansion
无效。如果阅读setlocal/?
,您将看到此命令用于批处理文件
所以,真正的问题是!福由于延迟扩展未激活(默认的cmd
配置),代码>被解析为文本
如何从命令行执行此操作?为cmd
实例启用延迟扩展
set "FOO=bar"
cmd /v /c"for /F %L in ('echo !FOO!') do echo %L"
请注意,的扩展!福
变量是在cmd/v/c
实例中执行的,而不是在开始执行echo
命令的cmd
实例中执行的。根据所使用的语法(%L
)您在命令行中运行它,并且在该上下文中,命令setlocal enabledelayedexpansion
无效。如果阅读setlocal/?
,您将看到此命令用于批处理文件
所以,真正的问题是!福由于延迟扩展未激活(默认的cmd
配置),代码>被解析为文本
如何从命令行执行此操作?为cmd
实例启用延迟扩展
set "FOO=bar"
cmd /v /c"for /F %L in ('echo !FOO!') do echo %L"
请注意,的扩展!福
变量是在cmd/v/c
实例中执行的,而不是在开始执行echo
命令的cmd
实例中执行的。根据所使用的语法(%L
)您在命令行中运行它,并且在该上下文中,命令setlocal enabledelayedexpansion
无效。如果阅读setlocal/?
,您将看到此命令用于批处理文件
所以,真正的问题是!福由于延迟扩展未激活(默认的cmd
配置),代码>被解析为文本
如何从命令行执行此操作?为cmd
实例启用延迟扩展
set "FOO=bar"
cmd /v /c"for /F %L in ('echo !FOO!') do echo %L"
请注意,的扩展!福
变量在cmd/v/c
实例中执行,而不是在cmd
实例中执行echo
命令。是的,我在命令解释器中运行它;感谢您提供有关SETLOCAL
的提示!我刚刚发现它也适用于第一个echo
,前面是cmd/V/C
部分。variantcmd/V/C*
使命令解释器在观看echos时执行命令echo条
;但是,在('echo^^!FOO^^')中为/F%L键入cmd/V/Cdo echo%L
执行echo!FOO!
,因此扩展会在以后进行。@aschipfl或多或少地在同一个cmd实例中进行,但不是在创建新的cmd
实例以执行内部echo
之前扩展变量,而是在执行echo%L
时进行扩展d、 这将被解析并转换为echo!FOO!
,然后,当启用延迟扩展时,变量的内容将被回显。我理解,因此内部echo
按字面意思输出!FOO!
,在用它替换%L
之后,由最后一个echo
扩展到条is可能非常有用,因为即使在for
语句的主体(do()
)中也可以修改变量FOO
。因此,(set FOO=BAR)&cmd/V/C“for/F%L in('echo^!FOO^^!)do((set FOO=MOD)&echo.%L)“
结果为MOD
,但为^!”代码>替换为
,返回初始字符串条
。@aschipfl,是的,在中!福代码>案例解析for
命令时完成扩展。在^^中!福^^ ^代码>案例执行外部echo
时完成扩展。是的,我在命令解释器中运行它;感谢您提供有关SETLOCAL
的提示!我刚刚发现它也适用于第一个echo
,前面是cmd/V/C
部分。variantcmd/V/C*
使命令解释器在观看echos时执行命令echo条
;但是,在('echo^!FOO^^^')do echo%L中为/F%L键入cmd/V/C“将执行echo!FOO!
,因此扩展甚至会在以后进行。@aschipfl,或多或少,