2014-02-11 36 views
0

我有一个批处理文件,我试图在if语句中使用一些变量。例如I set变量来自命令行参数1,或者如果没有参数1,那么我有一个默认值。然后,根据该值是默认值还是来自命令行的参数,我执行一些其他功能。批处理文件,如果语句怪异与变量分配和扩展

我注意到在if语句结束之后,我在if语句中分配的变量不可用。有人可以解释为什么吗?如果我运行该批处理文件有或没有返回ECHO is off.参数

@echo off 
setlocal ENABLEEXTENSIONS 

if .%1==. (
    set TEST1=NOTFOUND 
    echo %TEST1% 
) else (
    set TEST1=%1 
    echo %TEST1% 
) 

例如,这将无法呼应什么在TEST1。它认为变量仍然是空的。

如果我尝试if语句后得到的变量,它的工作原理:

@echo off 
setlocal ENABLEEXTENSIONS 

if .%1==. (
    set TEST1=NOTFOUND 
) else (
    set TEST1=%1 
) 
echo %TEST1% 


我敢肯定,这与变量扩展做的,但它确实把我扔。它看起来像我将在if声明中指定另一个变量,如set USING_DEFAULT_TEST1=TRUEset USING_DEFAULT_TEST1=FALSE或比较默认值或其他。

回答

1

在块语句(a parenthesised series of statements),所述整个块被解析并然后执行。块中的任何%var%将在该块被解析时被该变量的值取代 - 在块被执行之前。

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

两种常用方法是:1)使用setlocal enabledelayedexpansion并使用!var!代替%var%访问的var改变的值或2),以调用一个子程序使用改变的值来执行进一步的处理。