Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 如何使用当前变量内容创建新变量_Variables_Batch File_Set - Fatal编程技术网

Variables 如何使用当前变量内容创建新变量

Variables 如何使用当前变量内容创建新变量,variables,batch-file,set,Variables,Batch File,Set,我有一个变量var1,其内容为sharp=soulse var1=sharp=soothe 如何仅使用var1内容创建一个新变量来获取此值 sharp=soothe 我想像这样使用set命令 set %var1%= 但我不能再继续下去了。我希望我不必在=符号前后搜索字符串。我以为会有比这更快的方法 好的,我很接近。我发现了我正在使用的一些其他代码,这几乎适用于无限多的变量,但set命令语法又错了 set var1=unfilter=rem set var2=mdegrain=rem se

我有一个变量var1,其内容为sharp=soulse

var1=sharp=soothe
如何仅使用var1内容创建一个新变量来获取此值

sharp=soothe
我想像这样使用set命令

set %var1%=
但我不能再继续下去了。我希望我不必在=符号前后搜索字符串。我以为会有比这更快的方法

好的,我很接近。我发现了我正在使用的一些其他代码,这几乎适用于无限多的变量,但set命令语法又错了

set var1=unfilter=rem
set var2=mdegrain=rem

set n=0
:parseArgs2
set /a n+=1
if defined var%n% (
    set %var%n%%
    shift /1
    goto :parseArgs2
)
试试这个:

set var1=sharp=soothe
for /f "tokens=*" %%a in ("%var1%") do set %%a
echo %sharp%
或者只是:

for %%a in ("%var1%") do set %%a

只需从尝试中删除一个字符:-

set %var1%
如果您有一个变量数组:var1,var2。。。var20,则可以使用具有延迟扩展的FOR/L循环:

setlocal enableDelayedExpansion
rem define your variables here ...
for /l %%N in (1 1 20) do set !var%%N!
或者,如果您有一系列随机命名的变量,则可以使用一个简单的FOR:

setlocal enableDelayedExpansion
rem define your variables here ...
for %%V in (varA varB varC varD) do set !%%V!
更新以响应附加问题

我不明白为什么要使用SHIFT,除非还有其他代码没有显示。我取消了轮班

set var1=unfilter=rem
set var2=mdegrain=rem

set n=0
:parseArgs2
set /a n+=1
if defined var%n% (
  call set %%var%n%%%
  goto :parseArgs2
)


也许这就是你想要的

@echo off
setlocal EnableDelayedExpansion

set var1=unfilter=rem
set var2=mdegrain=rem
set var10=resize=rem

for /F "tokens=1* delims==" %%a in ('set var') do set %%b
在这种方法中,定义变量的数量和顺序都无关紧要;始终处理所有定义的变量

编辑:下面是在集合%%b之前放置ECHO命令时的输出:


很好用!现在还有一件事。我有大约20个这样的变量来做同样的事情。我相信我可以使用另一个for循环,也许在这个for循环中?+1,很好!更有趣的是,它与引号中的%%a不起作用:对于%var1%中的%%a,请设置%%a,我不知道,为什么不可以。@endro-封闭引号不起作用,因为%%a已经包含引号。只需使用set%%~a即可。只是一个观察:例如,如果要获取var1变量的值,要将其分配给X变量,可以执行以下操作:set X=%var1%或执行以下操作:对于%var1%中的%%a,执行set X=%%~a;这两种形式是等效的,但后者仅在需要额外扩展时使用,而不是在可以直接访问var1的值时使用……这适用于INI文件,每行包含property=value:例如,for/f delims=%%a in file.INI do set$%%a.$从内存中恢复变量。还有一件事!我不知道我会有多少变量,可能是20,可能是22。是否有一种方法可以在处理最后定义的变量后自动停止?我不想总是编辑那个数字20。if-defined命令应该可以在这里使用?@dbenbam-我有另一个头脑风暴。请再看第一篇文章。set命令语法又错了,我弄不明白。是的,shift是从其他代码中遗留下来的。不需要我。这个答案是有效的。不幸的是,我发现我的应用程序无法输入上面等号的变量。我只能得到这个-var1=unfilter-rem。所以我需要先将所有连字符更改为等号,然后才能使用上面的代码。最好的方法是什么?记住变量的数量可以改变@dbenham有什么建议吗?这里没用。“set var”命令的输出是什么@阿奇尼
@echo off
setlocal EnableDelayedExpansion

set var1=unfilter=rem
set var2=mdegrain=rem
set var10=resize=rem

for /F "tokens=1* delims==" %%a in ('set var') do set %%b
set unfilter=rem
set resize=rem
set mdegrain=rem