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

一个人

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

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

乔恩

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

  • %0命令行中指定的可执行文件(批处理文件)名称
  • %*在命令行中指定的所有参数-如果要将参数转发到另一个程序,这非常有用。

除了简单地访问参数外,还有许多重要的技术要注意。

检查是否传递了参数

这是通过类似的构造完成的,IF "%~1"==""当且仅当根本没有传递任何参数时,才为true。请注意,代字号字符会导致将所有引号从的值中删除%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 /?在命令提示符下键入来查看所有这些功能

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用批处理文件运行时,java命令行参数缺少特殊字符,如!,#

命令行参数缺少特殊字符,如!通过Inno Setup通过批处理文件运行时

命令在命令行上运行,但不在批处理文件中

使用spring boot进行spring批处理:从config或命令行中读取参数并在job中使用它们

如何将Windows路径转换为文件:批处理文件中的URL,适合SVN命令行使用

在Inno Setup中如何在不使用批处理文件的情况下执行命令行工具

循环/ D标志的批处理文件未出现在命令行中

如何在Windows命令行或批处理文件中在字符串中搜索斜杠或冒号?

在Windows批处理文件中通过命令行ftp使用%USERNAME%环境变量

在Windows命令行中更改时间变量的时间输出以在批处理文件中使用

Windows命令行:“无法识别为内部或外部命令,可操作程序或批处理文件。”

更新批处理文件中的命令行参数

如何在Windows命令行中的文件名和批处理脚本中使用日语字符?

在Windows批处理命令行中使用MSBuild属性?

批处理文件:在命令行中使用Loop

批处理:检查批处理文件中的命令行参数

通过批处理脚本执行参数化的.exe文件(Windows命令行)

在批处理文件中,我想运行包含文本文件中包含的命令行参数的exe。

批处理文件中的%*是否表示所有命令行参数?

如何使用批处理文件与命令行程序进行交互?

如何制作批处理文件以使用Flex命令行调试器?

如何将命令行参数传递给Windows批处理文件中的程序?

批处理文件中的%*是否表示所有命令行参数?

可以在批处理文件中使用并加入长路径变量来调用带有较长变量作为命令行参数的EXE吗?如何?

如何串联批处理文件的命令行参数?

是否可以在Windows命令行中编写一个小的(5行-或更多)批处理文件?

如何使用命令行创建批处理文件?

使用批处理文件通过命令行设置环境变量

在批处理脚本中使用命令行(Windows)连接两个文本文件