我想在另一个批处理文件中设置一个变量,如果它存在的话。但它只适用于子批处理文件中的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
答案 0 :(得分:1)
两个问题:
您的测试不正确。在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。< / p>
因此,IF (something) else (somethingelse)
将在遇到%variables%
时使用IF
的值执行。
尝试使用CALL ECHO %%TEMP%%
显示更改后的值,并在这个经常遇到的主题上查找无限SO项目的“delayedexpansion”。
第二个问题 - 影响第一个问题。
TEMP
和TMP
是特殊的变量名,用于指定临时文件目录的位置。最好不要改变它们,因为可能会出现意想不到的结果。使用另一个变量名。