Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Batch file 重新定义与另一个变量一起定义的变量的值_Batch File_Variables_Delayedvariableexpansion - Fatal编程技术网

Batch file 重新定义与另一个变量一起定义的变量的值

Batch file 重新定义与另一个变量一起定义的变量的值,batch-file,variables,delayedvariableexpansion,Batch File,Variables,Delayedvariableexpansion,我目前正在使用来自“jeb”的这个方法来处理许多变量。 效果很好。问题是我需要再次设置一些变量的值。 我所有的尝试都惨遭失败 set set arr[!idx!]=test call set arr[!idx!]=test set !arr[!idx!]!=test 我发现(在jeb链接本身中)一个没有任何优雅的解决方案,我仍然需要更改所有脚本,所以我仍然在等待响应 set i=1 set b1=var1 call echo %%b%i%%% set b%I%=var1changed cal

我目前正在使用来自“jeb”的这个方法来处理许多变量。

效果很好。问题是我需要再次设置一些变量的值。 我所有的尝试都惨遭失败

set set arr[!idx!]=test
call set arr[!idx!]=test
set !arr[!idx!]!=test
我发现(在jeb链接本身中)一个没有任何优雅的解决方案,我仍然需要更改所有脚本,所以我仍然在等待响应

set i=1
set b1=var1
call echo %%b%i%%%
set b%I%=var1changed
call echo %%b%i%%%

你的问题不清楚。我不明白你说的“我需要再次设置一些变量的值”是什么意思。你应该描述你的期望和你真正得到的。因此,我无法准确回答您的问题,但仅举一系列例子:

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
命令进行此管理。有关扩展延迟的更多详细信息,请访问。

echo!b%i%
要设置var的元素,不需要使用延迟扩展,只需输出内容即可<代码>设置arr[%idx%]=test,
Echo!arr[%idx%]
调用echo%%arr[%idx%]%%
如果处于(代码块)中,则会变得更加困难。请参阅:
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