在Windows命令行中使用批处理文件中的参数

在Windows中,如何访问批处理文件运行时传递的参数?

例如,假设我有一个名为hello.bat的程序。 当我在Windows命令行输入hello -a时,如何让我的程序知道-a作为参数传入?


正如其他人已经说过的那样,通过命令行传递的参数可以在带有符号%1%9批处理文件中访问。 您还可以使用另外两个令牌:

  • %0命令行中指定的可执行文件(批处理文件)的名称
  • %*在命令行中指定的所有参数 - 如果要将参数转发给其他程序,这非常有用。
  • 除了简单地了解如何访问参数外,还有许多重要的技术需要注意。

    检查参数是否通过

    这是通过像IF "%~1"==""这样的结构来完成的,当且仅当完全没有参数被传递时才是如此。 请注意,代字符字符会导致任何周围的引号从%1的值中删除; 如果该值包含双引号(包括语法错误的可能性),您将得到意想不到的结果。

    处理超过9个参数(或者简化生活)

    如果你需要访问9个以上的参数,你必须使用命令SHIFT 。 该命令将所有参数的值移动到一个位置,以便%0取值为%1%1取值为%2等。 %9取第十个参数的值(如果存在的话)在调用SHIFT之前不能通过任何变量获得(输入命令SHIFT /?获取更多选项)。

    当您想要轻松处理参数而不要求它们按特定顺序显示时, SHIFT也很有用。 例如,脚本可以按任意顺序识别标志-a-b 。 在这种情况下解析命令行的好方法是

    :parse
    IF "%~1"=="" GOTO endparse
    IF "%~1"=="-a" REM do something
    IF "%~1"=="-b" REM do something else
    SHIFT
    GOTO parse
    :endparse
    REM ready for action!
    

    这个方案允许你解析相当复杂的命令行而不会发疯。

    批次参数的替换

    对于表示文件名的参数,shell提供了许多与处理无法以其他方式访问的文件相关的功能。 该功能可以以%~开头的结构进行访问。

    例如,获取作为参数使用传入的文件的大小

    ECHO %~z1
    

    要获取批处理文件的启动目录的路径(非常有用!),可以使用

    ECHO %~dp0
    

    您可以通过键入CALL /?来查看所有这些功能CALL /? 在命令提示符下。


    使用批处理文件中的参数:%0和%9

    批处理文件可以引用以令牌形式传递的参数: %0%9

    %0 is the program name as it was called.
    %1 is the first command line parameter
    %2 is the second command line parameter
    and so on till %9.
    

    在命令行中传入的参数必须是字母数字字符并用空格分隔。 由于%0是调用时的程序名,因此如果在启动时启动, %0在AUTOEXEC.BAT中将为空。

    例:

    将以下命令放入名为mybatch.bat的批处理文件中:

    @echo off
    @echo hello %1 %2
    pause
    

    像这样调用批处理文件: mybatch john billy会输出:

    hello john billy
    

    获取批处理文件的超过9个参数,请使用:%*

    百分比星标记%*表示“其余参数”。 您可以使用for循环来抓取它们,如下所示:

    http://www.robvanderwoude.com/parameters.php

    有关批处理参数的分隔符的注意事项

    命令行参数中的某些字符被批处理文件忽略,具体取决于DOS版本,它们是否被“转义”,通常取决于它们在命令行中的位置:

    commas (",") are replaced by spaces, unless they are part of a string in 
    double quotes
    
    semicolons (";") are replaced by spaces, unless they are part of a string in 
    double quotes
    
    "=" characters are sometimes replaced by spaces, not if they are part of a 
    string in double quotes
    
    the first forward slash ("/") is replaced by a space only if it immediately 
    follows the command, without a leading space
    
    multiple spaces are replaced by a single space, unless they are part of a 
    string in double quotes
    
    tabs are replaced by a single space
    
    leading spaces before the first command line argument are ignored
    

    批处理文件自动将文本传递给程序,只要它们是要分配给它们的变量即可。 他们被传递,以便他们被发送; 例如%1将是程序被调用后发送的第一个字符串,等等。

    如果你有Hello.bat并且内容是:

    @echo off
    echo.Hello, %1 thanks for running this batch file (%2)
    pause
    

    并通过调用批处理命令

    hello.bat APerson241%日期%

    你应该收到这条消息:

    你好,APerson241感谢你运行这个批处理文件(01/11/2013)

    链接地址: http://www.djcxy.com/p/92299.html

    上一篇: Using parameters in batch files at Windows command line

    下一篇: What does %~dp0 mean, and how does it work?