小编典典

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

all

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

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


阅读 154

收藏
2022-08-07

共1个答案

小编典典

正如其他人已经说过的那样,通过命令行传递的参数可以在批处理文件中%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 /?您可以通过在命令提示符中键入来查看这些功能的全部范围。

2022-08-07