Variables 连接多个变量';s批处理/CMD中的名称
搜索这个网站和其他网站-没有乐趣Variables 连接多个变量';s批处理/CMD中的名称,variables,batch-file,cmd,Variables,Batch File,Cmd,搜索这个网站和其他网站-没有乐趣 :: first for loop for /L %%x in (1,1,2) do ( generic-executable.output > grab1-%%x.txt :: second, nested for loop for /f "delims=" %%i in (grab1-%%x.txt) do (set grab1=%%i) echo variable string is %grab1%%x% generic-executable.o
:: first for loop
for /L %%x in (1,1,2) do (
generic-executable.output > grab1-%%x.txt
:: second, nested for loop
for /f "delims=" %%i in (grab1-%%x.txt) do (set grab1=%%i)
echo variable string is %grab1%%x%
generic-executable.output > grab2-%%x.txt
for /f "delims=" %%i in (grab2-%%x.txt) do (set grab2=%%i)
echo variable string is %grab2%%x%
)
正在尝试运行嵌套的for循环,该循环将
1) 将数据写入文件
2) 从文件中获取数据并将其保存到另一个变量
结束变量的名称应该是每个for循环(即grab1-1、2-1、1-2、2-2)的串联
将数据保存到变量中是没有问题的,格式化变量以调用数据是非常困难的
我很可能在连接变量的格式中遗漏了一些内容。我试过单,,,^
,!,一个%
,两个%
,反斜杠,确认!!…我得到的最接近的是
echo %grab1-%%x
给出:
如果您能提供任何建议,我将不胜感激
谢谢,
Dave对于批处理新手来说,您遇到了一个经典的绊脚石:您不能在循环(括号内)中设置变量,然后在同一循环中使用%var%
访问值。整个循环(括号内的代码块)在一次过程中解析,并且在解析时展开%var%
。因此您可以看到var
的值,与执行循环之前一样
解决方案是使用脚本顶部附近的setlocal enableDelayedExpansion
启用延迟扩展,然后使用延迟扩展将变量扩展为!var!
。延迟扩展意味着在运行时扩展该值-这正是您想要的
我相信这就是你想要实现的
setlocal enableDelayedExpansion
for /L %%x in (1,1,2) do (
genericOutput1.exe > grab1-%%x.txt
for /f "delims=" %%i in (grab1-%%x.txt) do set "grab1-%%x=%%i"
echo grab1-%%x variable string is !grab1-%%x!
genericOutput2.exe > grab2-%%x.txt
for /f "delims=" %%i in (grab2-%%x.txt) do set "grab2-%%x=%%i"
echo grab2-%%x variable string is !grab2-%%x!
)
::List all of the grab variable defined
set grab
您不需要将可执行文件的输出保存到文件中。(当然,除非这是您的要求)。您可以使用FOR/F直接处理输出。FOR命令有许多看起来几乎相同但行为非常不同的变体。此变体使用单引号使/F处理命令
setlocal enableDelayedExpansion
for /L %%x in (1,1,2) do (
for /f "delims=" %%i in ('genericOutput1.exe') do set "grab1-%%x=%%i"
echo grab1-%%x variable string is !grab1-%%x!
for /f "delims=" %%i in ('genericOutput1.exe') do set "grab2-%%x=%%i"
echo grab2-%%x variable string is !grab2-%%x!
)
::List all of the grab variable defined
set grab
注意FOR/F将迭代每一行(无论是来自文本文件还是来自命令输出)。您的算法将只保存和打印最后一行的内容-每一连续行都将覆盖上一行的值。%grab1%%x%%
表示将%x%%
放在%grab1%%
旁边。但是什么是%x%%
?脚本中似乎没有此类变量。您的意思可能是%x
,表达式应该是%grab1%%%x
。%grab2%%x%%
@Andriy M-这是试图将两个变量(即%grab1%和%%x)包装成一个,因此我将前者的结尾%移动到后者的结尾。这与将两者包装成一个相同的概念”。没用,八达冰!!你在很多方面都是对的。。。代码和N00b状态!IRT捕获一般输出,是的,这是本地需求。很明显,我需要得到延期扩张的教育。太好了!
setlocal enableDelayedExpansion
for /L %%x in (1,1,2) do (
for /f "delims=" %%i in ('genericOutput1.exe') do set "grab1-%%x=%%i"
echo grab1-%%x variable string is !grab1-%%x!
for /f "delims=" %%i in ('genericOutput1.exe') do set "grab2-%%x=%%i"
echo grab2-%%x variable string is !grab2-%%x!
)
::List all of the grab variable defined
set grab