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

时间:2013-11-22 04:48:31

标签: variables search batch-file

我有一个批处理文件,它引入所有命令行参数并将它们存储为变量。然后我在每个中搜索一个名称,然后使用新内容(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”的新var和一个值为“rem”的var,而不仅仅是给var1一个rem值。我以为集合!%1!= rem会这样做,但事实并非如此。

1 个答案:

答案 0 :(得分:4)

让我们看看这个问题。当

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!