检查命令行参数是否是使用IF的驱动器

时间:2012-10-12 01:30:12

标签: windows shell batch-file

我看到了一个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

2 个答案:

答案 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中使用的内容有多少控制权。