0

我看到一个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" != "") and (%1 == "%~d1")) ?

问题 2:似乎只有当 %1 是驱动器时才会设置 INSTALL_DIR。但是下面的单次检查还不够吗?

if /I "%1" == "%~d1" set INSTALL_DIR=%~d1
4

2 回答 2

2

2 一起使用的事实if并没有太大的区别,只是碰巧如果第一个成功运行的命令是另一个if语句。

是的, 2具有与逻辑if相同的功能。AND

单次检查似乎就足够了,但前提是他们没有对批处理执行特定的错误消息。

例如,如果没有给出参数,他们可能想要明确地检查这一点,并给出一条错误消息,说明没有参数。然后,如果有一个,并且它不是驱动器,请为此提供另一条错误消息。

希望这可以帮助。

于 2012-10-12T07:45:22.550 回答
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 中使用的内容有多少控制权。

于 2012-10-13T03:46:08.717 回答