Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 连接多个变量';s批处理/CMD中的名称_Variables_Batch File_Cmd - Fatal编程技术网

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