Windows Batch:如何将一个命令的输出设置为变量并在另一个命令中使用它?

时间:2013-02-19 16:07:42

标签: parsing batch-file

我正在尝试解析变量。说NAMELIST =“AAA BBB CCC”并将每个存储为变量。然后,这些新变量必须在另一个命令中使用。例如:

perl.exe C:\action.pl <VAR1>
perl.exe C:\action.pl <VAR2>
perl.exe C:\action.pl <VAR3>

我是Windows Batch的新手,所以任何帮助都会受到赞赏。

我知道这个帖子但是没有完全理解解决方案

Windows batch files: How to set a variable with the result of a command?

2 个答案:

答案 0 :(得分:1)

当您引用“将每个变量存储在变量中”时,此处涉及的概念是 array 。你可以用这种方式将NAMELIST变量的单词分成3个数组元素:

setlocal EnableDelayedExpansion
set i=0
for %%a in (%namelist%) do (
   set /A i=i+1
   set VAR!i!=%%a
)

这样,您可以直接使用每个数组元素:

perl.exe C:\action.pl %VAR1%
perl.exe C:\action.pl %VAR2%
perl.exe C:\action.pl %VAR3%

或者,以更简单的方式使用循环:

for /L %%i in (1,1,3) do perl.exe C:\action.pl !VAR%%i!

编辑:您可以在NAMELIST变量中使用此方法且无限数量的值,只需使用%i%的前一个值而不是3(更好的是,将其更改为“n” )。我还建议您以这种方式使用标准数组表示法:VAR[%%i]

setlocal EnableDelayedExpansion
set namelist=AAA BBB CCC DDD EEE FFF
set n=0
for %%a in (%namelist%) do (
   set /A n+=1
   set VAR[!n!]=%%a
)
for /L %%i in (1,1,%n%) do perl.exe C:\action.pl !VAR[%%i]!

答案 1 :(得分:0)

可以使用for循环设置批处理中的变量。我将尝试解释链接中给出的示例。

  

for / f“delims =”%% a in(command)do @set theValue = %% a

这里For / F用于将输出分解为标记。 “delims =”表示没有给出明确的分隔符,因此假定为“space”。 %% a类似于循环的索引变量,而不是编程语言中的传统索引变量,其中索引变量具有数值,索引中的变量可以存储令牌,即命令的输出。 set命令然后将变量“theValue”设置为%% a,它保存命令的输出/标记。 因此,如果声明是:

 for /f "delims=" %%a in (`echo Hi everyone!`) do @set theValue=%%a

theValue will then hold "Hi" as it is the first token seprated by space.

您可以根据自己的要求指定自己的分隔符。希望这可以帮助!