如何从当前变量内容创建新变量

时间:2013-11-22 17:57:30

标签: variables batch-file set

我有一个变量“var1”,内容为“sharp = soothe”

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
)

3 个答案:

答案 0 :(得分:3)

试试这个:

set var1=sharp=soothe
for /f "tokens=*" %%a in ("%var1%") do set %%a
echo %sharp%

或只是:

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

答案 1 :(得分:3)

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

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的原因,除非您还没有显示其他代码。我删除了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
)

setlocal enableDelayedExpansion
set var1=unfilter=rem
set var2=mdegrain=rem

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

答案 2 :(得分:2)

也许这就是你想要的?

@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

在此方法中,定义变量的 number 及其 order 无关紧要;始终处理所有已定义的变量。

编辑:以下是在ECHO之前放置set %%b命令时的输出:

set unfilter=rem
set resize=rem
set mdegrain=rem