在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