Batch file 为什么不是';t在bat脚本中传递给下标的my env变量

Batch file 为什么不是';t在bat脚本中传递给下标的my env变量,batch-file,Batch File,我有两个脚本: testEnv.bat: set TEST_VAR = "hello" call testEnvSub.bat testEnvSub.bat: echo %TEST_VAR% 当我运行testEnv.bat时,我只得到: “ECHO已打开” 所以很明显,我在testEnv中设置的env变量没有被传递给subscript。如何使其正确传递?问题:“很明显,我在testEnv中设置的env变量没有被传递到subscript。” 回答:一点也不,变量是创建的,

我有两个脚本:

testEnv.bat:

set TEST_VAR = "hello"

call testEnvSub.bat
testEnvSub.bat:

echo %TEST_VAR%
当我运行testEnv.bat时,我只得到:

“ECHO已打开”


所以很明显,我在testEnv中设置的env变量没有被传递给subscript。如何使其正确传递?

问题:“很明显,我在testEnv中设置的env变量没有被传递到subscript。”

回答:一点也不,变量是创建的,您只是没有调用正确的变量名,因为您创建的变量不正确


问题:“如何让它正确通过?”

回答:与C+、Perl等不同,Windows
cmd
实际上使用空格作为变量名和值的一部分。因此,实际上,您创建了一个名为
%TEST\u VAR%
的变量,而不是
%TEST\u VAR%
,其值为
“hello”
,包括前导空格

请注意,双引号在变量名之前开始,在值之后结束,以消除空格蠕变

@echo off
set "TEST_VAR=hello"
call testEnvSub.bat

另外,这并不是说它在执行上有多大区别,试着用
.cmd
扩展名来命名批处理文件,而不是用
.bat
它有点过时。

问题:“很明显,我在testEnv中设置的env变量没有被传递到subscript。”

回答:一点也不,变量是创建的,您只是没有调用正确的变量名,因为您创建的变量不正确


问题:“如何让它正确通过?”

回答:与C+、Perl等不同,Windows
cmd
实际上使用空格作为变量名和值的一部分。因此,实际上,您创建了一个名为
%TEST\u VAR%
的变量,而不是
%TEST\u VAR%
,其值为
“hello”
,包括前导空格

请注意,双引号在变量名之前开始,在值之后结束,以消除空格蠕变

@echo off
set "TEST_VAR=hello"
call testEnvSub.bat

<>也不是说它在执行上有很大的差别,尝试用<代码> .CMD扩展来命名批处理文件,而不是<代码> .BAT 这是过时的。

我不认为你正在做的是“通过”。被调用的脚本从父进程继承环境。因此,父流程中定义的任何变量都可用于子流程。如果你真的通过了变量,那么你会这样做:<代码>调用TESTNVB.BAT“%TestVaR %”< /C> >我不认为你正在做的是“通过”。被调用的脚本从父进程继承环境。因此,父流程中定义的任何变量都可用于子流程。如果您真的在传递变量,那么您可以这样做:
调用testEnvSub.bat“%test\u var%”