重新定义与另一个变量一起定义的变量的值
Redefining the value of a variable that has been defined together with another variable
我目前正在使用 "jeb" 中的这种方法来处理许多变量。
BAT-file: variable contents as part of another variable
setlocal EnableDelayedExpansion
set arr[1]=17
set arr[2]=35
set arr[3]=77
(
set idx=2
set /a var=arr[!idx!]
echo !var!
)
效果很好。问题是我需要重新设置一些变量的值。
我所有的尝试都惨遭失败。
set set arr[!idx!]=test
call set arr[!idx!]=test
set !arr[!idx!]!=test
我发现(在 jeb link 本身)一个没有任何优雅的解决方案,我仍然必须更改我的所有脚本,所以我仍在等待响应。
set i=1
set b1=var1
call echo %%b%i%%%
set b%I%=var1changed
call echo %%b%i%%%
你的问题不清楚。我不明白你说 "I need to set the value of some variables again" 是什么意思。你应该描述你的期望和你真正得到的。出于这个原因,我无法为您的问题提供准确的答案,只能提供一系列示例:
echo off
setlocal EnableDelayedExpansion
rem The target variable is "b1" or "b2", depending on *current* value of "i":
set i=1
set b1=var1
set b2=var2
call echo %%b%i%%%
rem This works, but only *outside parentheses*
set b%i%=var1changed
call echo %%b%i%%%
rem Inside paren, this works only when "i" var is not changed:
(
set b%i%=var1changed again
call echo %%b%i%%%
set i=2
set b%i%=wrong: this should be b2, but it is b1
call echo %%b%i%%%
)
set b
rem Using delayed expansion for the index works always:
(
set i=1
set b!i!=var1 again, inside paren
call echo %%b!i!%%
set i=2
set b!i!=var2changed
call echo %%b!i!%%
)
set b
输出:
var1
var1changed
var1changed again
wrong: this should be b2, but it is b1
b1=wrong: this should be b2, but it is b1
b2=var2
var1 again, inside paren
var2changed
b1=var1 again, inside paren
b2=var2changed
您也可以使用 FOR /F
命令进行此管理。 this answer.
中的更多详细信息
我目前正在使用 "jeb" 中的这种方法来处理许多变量。 BAT-file: variable contents as part of another variable
setlocal EnableDelayedExpansion
set arr[1]=17
set arr[2]=35
set arr[3]=77
(
set idx=2
set /a var=arr[!idx!]
echo !var!
)
效果很好。问题是我需要重新设置一些变量的值。 我所有的尝试都惨遭失败。
set set arr[!idx!]=test
call set arr[!idx!]=test
set !arr[!idx!]!=test
我发现(在 jeb link 本身)一个没有任何优雅的解决方案,我仍然必须更改我的所有脚本,所以我仍在等待响应。
set i=1
set b1=var1
call echo %%b%i%%%
set b%I%=var1changed
call echo %%b%i%%%
你的问题不清楚。我不明白你说 "I need to set the value of some variables again" 是什么意思。你应该描述你的期望和你真正得到的。出于这个原因,我无法为您的问题提供准确的答案,只能提供一系列示例:
echo off
setlocal EnableDelayedExpansion
rem The target variable is "b1" or "b2", depending on *current* value of "i":
set i=1
set b1=var1
set b2=var2
call echo %%b%i%%%
rem This works, but only *outside parentheses*
set b%i%=var1changed
call echo %%b%i%%%
rem Inside paren, this works only when "i" var is not changed:
(
set b%i%=var1changed again
call echo %%b%i%%%
set i=2
set b%i%=wrong: this should be b2, but it is b1
call echo %%b%i%%%
)
set b
rem Using delayed expansion for the index works always:
(
set i=1
set b!i!=var1 again, inside paren
call echo %%b!i!%%
set i=2
set b!i!=var2changed
call echo %%b!i!%%
)
set b
输出:
var1
var1changed
var1changed again
wrong: this should be b2, but it is b1
b1=wrong: this should be b2, but it is b1
b2=var2
var1 again, inside paren
var2changed
b1=var1 again, inside paren
b2=var2changed
您也可以使用 FOR /F
命令进行此管理。 this answer.