Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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
Variables Windows批处理-如何搜索多个变量,然后使用它们的名称创建新变量_Variables_Search_Batch File - Fatal编程技术网

Variables Windows批处理-如何搜索多个变量,然后使用它们的名称创建新变量

Variables Windows批处理-如何搜索多个变量,然后使用它们的名称创建新变量,variables,search,batch-file,Variables,Search,Batch File,我有一个批处理文件,它将所有命令行参数都拉入并存储为变量。然后,我在每个文件中搜索一个名称,然后为该名称创建一个新变量,但包含新内容(rem)。我在这里完成了第一次搜索,但我不知道如何在不重复相同命令的情况下搜索所有其他搜索。我试着这样做,但没有成功。无论如何,如果有比这更简单的方法,请告诉我 @echo off setlocal enableDelayedExpansion set var1=noisereduction-01 set var2=sharpener-03 set var3=re

我有一个批处理文件,它将所有命令行参数都拉入并存储为变量。然后,我在每个文件中搜索一个名称,然后为该名称创建一个新变量,但包含新内容(rem)。我在这里完成了第一次搜索,但我不知道如何在不重复相同命令的情况下搜索所有其他搜索。我试着这样做,但没有成功。无论如何,如果有比这更简单的方法,请告诉我

@echo off
setlocal enableDelayedExpansion
set var1=noisereduction-01
set var2=sharpener-03
set var3=resize-02
set var4=output-01
set var5=grain-02
set var6=crf-21
set var7=preset-veryfast
set var8=tune-film
set var9=ref-2
set var10=outputdir-g:\output
set var11=mode-3

for /l %%N in (1 1 11) do call :test var%%N
exit /b

:test  variableName
echo !%1!|>nul findstr /rx .*noisereduction.* && set !%1!=rem
echo %1 = !%1!
exit /b

哎呀,上面有个错误。我想创建一个名为“noisereduction-01”且值为“rem”的新var,而不仅仅是给var1一个rem值。我认为该集合是%1!=雷会这么做,但事实并非如此

让我们看看这个问题。什么时候

set var1=noisereduction-01
。。。及

for /l %%N in (1 1 11) do call :test var%%N
。。。然后,对test的第一个调用是使用“var1”参数。这意味着进入测试:

set !%1!=rem  IS  set !var1!=rem  IS  set noisereduction-01=rem
。。。这就是你想要的

然而:

echo %1 = !%1!  IS  echo var1 = !var1!  IS  echo var1 = noisereduction-01
如果要显示noisereduction-01变量的值,则必须执行额外的展开步骤:

for %%v in (!%1!) do echo param: %1, variable: !%1!, value: !%%v!

让我们看看这个问题。什么时候

set var1=noisereduction-01
。。。及

for /l %%N in (1 1 11) do call :test var%%N
。。。然后,对test的第一个调用是使用“var1”参数。这意味着进入测试:

set !%1!=rem  IS  set !var1!=rem  IS  set noisereduction-01=rem
。。。这就是你想要的

然而:

echo %1 = !%1!  IS  echo var1 = !var1!  IS  echo var1 = noisereduction-01
如果要显示noisereduction-01变量的值,则必须执行额外的展开步骤:

for %%v in (!%1!) do echo param: %1, variable: !%1!, value: !%%v!

好的,你说得对。那么我如何对列表中的所有变量执行此操作,一个“for”命令???@tyee-如果您需要批量控制某些内容,通常需要一个
for
循环。@tyee:您已经在(11)中有了
for/l%%N的do call:test var%%N
循环来查看列表中的所有变量,只需在
:test
子例程中添加额外的扩展。我遗漏了什么?好的,你是对的。那么我如何对列表中的所有变量执行此操作,一个“for”命令???@tyee-如果您需要批量控制某些内容,通常需要一个
for
循环。@tyee:您已经在(11)中有了
for/l%%N的do call:test var%%N
循环来查看列表中的所有变量,只需在
:test
子例程中添加额外的扩展。我错过了什么?