运行 cmd 中每行变量的命令
Run command for each line of variable in cmd
我想 运行 为变量的每一行(在 cmd
中,即批处理)执行一个命令(在本例中为 echo
)。在这种情况下,行应该由 \n
分隔,但其他分隔符也应该有效。
因此我设置了一个变量:
> set var="foo\nbar"
然后我想 运行 我的命令 (echo
) 在每一行,即在“foo”和“bar”上。为此,我尝试使用 for
:
> for /f "tokens=* delims=\n" %s in (%var%) do (echo %s)
foo\nbar
显然这不是我想要的 - 我期待的是
foo
bar
如何实现?
您可以使用真正的换行符来获得您想要的效果。
setlocal EnableDelayedExpansion
(set \n=^
%=empty, do not modify this line=%
)
set "var=foo!\n!bar"
for /f "delims=" %%L in ("!var!") do (
echo ## %%L
)
变量中的其他分隔符
可以使用,但稍后必须换行。
setlocal EnableDelayedExpansion
(set \n=^
%=empty, do not modify this line=%
)
set "var=my,list,delimited,by,commas"
for %%L in ("!\n!") do (
for /f "delims=" %%k in ("!var:,=%%~L!") do (
echo ## %%k
)
)
关于 FOR /F 中的 delims 选项
delims 选项用于将一行拆分为标记,不会创建更多循环迭代 - 永远不会。
FOR /F "tokens=1,2,3 delims=;" %%A in ("123;456;789") do echo ... %%A, %%B, %%C
输出
... 123, 456, 789
没有
... 123
... 456
... 789
%var%
用作 FOR
-parcer 的输入集。
但在 运行 FOR
命令之前,我们应该将 \n
替换为 space (+外引号):
Syntax: %variable:StrToFind=NewStr%
这些 spaces 在我们的 FOR
-解析器中成为定界符。
要从单个字母变量中自动删除引号,请使用符号 ~
Syntax: %~1
所以我们有下一个代码:
set var="foo\nbar"
for %%A IN (%var:\n=" "%) DO @ECHO=%%~A
P.S。正如 jeb 所说,代码无法使用特殊符号正常工作:变量内容中的 *
、?
、%%
。
我想 运行 为变量的每一行(在 cmd
中,即批处理)执行一个命令(在本例中为 echo
)。在这种情况下,行应该由 \n
分隔,但其他分隔符也应该有效。
因此我设置了一个变量:
> set var="foo\nbar"
然后我想 运行 我的命令 (echo
) 在每一行,即在“foo”和“bar”上。为此,我尝试使用 for
:
> for /f "tokens=* delims=\n" %s in (%var%) do (echo %s)
foo\nbar
显然这不是我想要的 - 我期待的是
foo
bar
如何实现?
您可以使用真正的换行符来获得您想要的效果。
setlocal EnableDelayedExpansion
(set \n=^
%=empty, do not modify this line=%
)
set "var=foo!\n!bar"
for /f "delims=" %%L in ("!var!") do (
echo ## %%L
)
变量中的其他分隔符
可以使用,但稍后必须换行。
setlocal EnableDelayedExpansion
(set \n=^
%=empty, do not modify this line=%
)
set "var=my,list,delimited,by,commas"
for %%L in ("!\n!") do (
for /f "delims=" %%k in ("!var:,=%%~L!") do (
echo ## %%k
)
)
关于 FOR /F 中的 delims 选项
delims 选项用于将一行拆分为标记,不会创建更多循环迭代 - 永远不会。
FOR /F "tokens=1,2,3 delims=;" %%A in ("123;456;789") do echo ... %%A, %%B, %%C
输出
... 123, 456, 789
没有
... 123
... 456
... 789
%var%
用作 FOR
-parcer 的输入集。
但在 运行 FOR
命令之前,我们应该将 \n
替换为 space (+外引号):
Syntax: %variable:StrToFind=NewStr%
这些 spaces 在我们的 FOR
-解析器中成为定界符。
要从单个字母变量中自动删除引号,请使用符号 ~
Syntax: %~1
所以我们有下一个代码:
set var="foo\nbar"
for %%A IN (%var:\n=" "%) DO @ECHO=%%~A
P.S。正如 jeb 所说,代码无法使用特殊符号正常工作:变量内容中的 *
、?
、%%
。