我有一个批处理文件,我正在尝试使用if
语句中的一些变量。例如,我set
一个来自命令行参数1的变量,或者如果没有参数1,那么我有一个默认值。然后,根据值是默认值还是命令行中的参数,我执行其他一些功能。
我注意到在if
语句结束后,我在if语句中指定的变量不可用。有人可以解释为什么会这样吗?
例如,这将无法回显TEST1中的内容:
@echo off
setlocal ENABLEEXTENSIONS
if .%1==. (
set TEST1=NOTFOUND
echo %TEST1%
) else (
set TEST1=%1
echo %TEST1%
)
如果我使用或不使用参数运行该批处理文件,则返回ECHO is off.
。它认为变量仍然是空的。
如果我尝试在if
语句之后获取变量,它可以工作:
@echo off
setlocal ENABLEEXTENSIONS
if .%1==. (
set TEST1=NOTFOUND
) else (
set TEST1=%1
)
echo %TEST1%
我确定这与变量扩展有关,但它真的让我感动。看起来我会在if
语句中指定另一个变量,例如set USING_DEFAULT_TEST1=TRUE
和set USING_DEFAULT_TEST1=FALSE
,或者与默认值或其他内容进行比较。
答案 0 :(得分:1)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。在执行块之前,块中的任何%var%
将被解析块时的变量值替换。
因此,IF (something) else (somethingelse)
将在遇到%variables%
时使用IF
的值执行。
解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
来访问已更改的var
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。