0

我正在尝试解析一个变量。说 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 批处理文件:如何使用命令的结果设置变量?

4

2 回答 2

1

当您提到“将每个存储在一个变量中”时,这里涉及的概念是数组。您可以通过这种方式将 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]!
于 2013-02-19T17:20:36.793 回答
0

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

对于 /f "delims=" %%a in ( command) 执行 @set theValue=%%a

这里 For /F 用于将输出分解为标记。“delims=” 表示没有给出明确的分隔符,因此假定为“空格”。%%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.

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

于 2013-02-19T16:51:34.367 回答