我看到了一个Windows批处理文件,如下所示:
..
::Handle the case where the install dir is specified as a drive
if not "%1" == "" if /I "%1" == "%~d1" set INSTALL_DIR=%~d1
..
问题1:我从未见过像这样一起使用两个IF语句。它是否像AND一样,即(persudo code:(("%1"!="")和(%1 =="%~d1" ))?
问题2:似乎只有%1是驱动器才会设置INSTALL_DIR。但是,以下单一检查还不够吗?
if /I "%1" == "%~d1" set INSTALL_DIR=%~d1
答案 0 :(得分:2)
2 if
一起使用这一事实并没有太大的区别,只是如果第一个成功的话要运行的命令是另一个if
语句。
是的,2 if
具有与AND
逻辑相同的功能。
单次检查似乎已足够,但前提是他们没有对批次执行特定的错误消息。
例如,如果没有给出参数,则可能需要显式检查,并给出一条错误消息,指出没有参数。然后,如果有一个,并且它不是驱动器,请为此提供另一条错误消息。
希望这有帮助。
答案 1 :(得分:0)
问题1 :您可能会发现像这样更容易进行IF嵌套(为了便于阅读)。
..
::Handle the case where the install dir is specified as a drive
if not "%1" == "" (
if /I "%1" == "%~d1" (
set INSTALL_DIR=%~d1
)
)
..
这也允许您在“if”实例中嵌套多个命令。例如:
..
::Handle the case where the install dir is specified as a drive
if not "%1" == "" (
echo Parameter 1 is not empty
if /I "%1" == "%~d1" (
echo Parameter 1 is a drive so setting the variable
set INSTALL_DIR=%~d1
)
)
..
问题2 :在您的示例中,测试确实有效地要求参数为驱动器或路径(带驱动器),并将参数过滤到驱动器中。
够了吗?这取决于您是否需要进行额外检查,如:
如果您的支票足够,那么您需要的代码是多么强大,以及您对%1中使用的内容有多少控制权。