在 Windows 中,如何访问批处理文件运行时传递的参数?
例如,假设我有一个名为hello.bat. 当我hello -a在 Windows 命令行中输入时,如何让我的程序知道-a作为参数传入的?
hello.bat
hello -a
-a
正如其他人已经说过的那样,通过命令行传递的参数可以在批处理文件中%1以%9. 您还可以使用另外两个令牌:
%1
%9
%0
%*
除了简单地如何访问参数之外,还有许多重要的技术需要注意。
这是通过类似的结构来完成的IF "%~1"=="",当且仅当根本没有传递任何参数时才成立。请注意波浪字符,它会导致从%1; 的值中删除任何周围的引号。如果该值包含双引号,则如果没有波浪号,您将得到意外的结果,包括语法错误的可能性。
IF "%~1"==""
如果您需要访问超过 9 个参数,则必须使用命令SHIFT。此命令将所有参数的值移动一个位置,以便%0获取 的值%1,%1获取 的值%2等。%9获取第十个参数的值(如果存在),在调用之前无法通过任何变量获得SHIFT(输入命令SHIFT /?以获得更多选项)。
SHIFT
%2
SHIFT /?
SHIFT当您想要轻松处理参数而不要求它们以特定顺序显示时,它也很有用。例如,脚本可以以任何顺序识别-a标志-b。在这种情况下解析命令行的一个好方法是
-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 /?