我有一个批处理文件,它引入所有命令行参数并将它们存储为变量。然后我在每个中搜索一个名称,然后使用新内容(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会这样做,但事实并非如此。
答案 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!