在Windows中,如何访问运行批处理文件时传递的参数?
例如,假设我有一个名为的程序hello.bat
。当我hello -a
在Windows命令行中输入时,如何让我的程序知道它-a
作为参数传入?
正如其他人已经说过的那样,可以在批处理文件中使用标记%1
为来访问通过命令行传递的参数%9
。您还可以使用其他两个令牌:
%0
是命令行中指定的可执行文件(批处理文件)名称。%*
是在命令行中指定的所有参数-如果要将参数转发到另一个程序,这非常有用。除了简单地访问参数外,还有许多重要的技术要注意。
这是通过类似的构造完成的,IF "%~1"==""
当且仅当根本没有传递任何参数时,才为true。请注意,代字号字符会导致将所有引号从的值中删除%1
;如果没有波浪号,则该值包含双引号(包括语法错误的可能性),您将得到意外的结果。
如果需要访问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 /?
在命令提示符下键入来查看所有这些功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句