我正在尝试解析变量。说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?
答案 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.
您可以根据自己的要求指定自己的分隔符。希望这可以帮助!