在另一个批处理文件中设置一个变量

时间:2014-12-16 11:17:24

标签: batch-file cmd

我想在另一个批处理文件中设置一个变量,如果它存在的话。但它只适用于子批处理文件中的localy。我该如何解决这个问题?

Main.bat:

SET TEMP=""
IF EXIST SUB.bat (
    CALL SUB.bat 
      REM Returns: TEMP="" IN MAIN
      ECHO %TEMP% IN MAIN
) ELSE (
      SET TEMP="DEFAULT VALUE"
)

Sub.bat:

SET TEMP="OTHER VALUE"
REM Returns: TEMP="OTHER VALUE" IN SUB
ECHO %TEMP% IN SUB

通过调用Main.bat输出:

TEMP="OTHER VALUE" IN SUB
TEMP="" IN MAIN

1 个答案:

答案 0 :(得分:1)

两个问题:

您的测试不正确。在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)。< / p>

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。

尝试使用CALL ECHO %%TEMP%%显示更改后的值,并在这个经常遇到的主题上查找无限SO项目的“delayedexpansion”。

第二个问题 - 影响第一个问题。

TEMPTMP是特殊的变量名,用于指定临时文件目录的位置。最好不要改变它们,因为可能会出现意想不到的结果。使用另一个变量名。