Using parameters in batch files at Windows command line
在Windows中,如何访问运行批处理文件时传递的参数?
例如,假设我有一个名为
另一些参数已经说过,通过命令线的参数可以在批量文件中以
- 是指在命令行中指定的可执行(分批文件)名称。
- 是命令线中所有特异参数——如果你想将参数向前推进到另一个程序,这是非常有用的。
此外,还有许多重要的技术,可以在简单地获得参数的过程中了解这些技术。
检查参数是否经过
这是以
处理的比9个论据还要多(或只是使生活简单)
如果你需要超过9个论据,你必须使用
当你想要简单的过程参数而不要求它们在一个特定的顺序中出现时,也是有用的。例如,一个脚本可以识别任何标记。在这样的情况下,一个很好的方法是接管指挥线。
1 2 3 4 5 6 7 8 | :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! |
这个方案使你能够在没有内疚的情况下完成漂亮的复杂指挥线。
批量参数的替换
For parameters that represent file names the shell provides lots of functionality related to working with files that is not accessible in any other way.这一功能性是通过与
举例来说,要将文件大小作为一个论据的使用
1 | ECHO %~z1 |
从(非常使用!)你可以使用
1 | ECHO %~dp0 |
你可以在快速命令中看到这些能力的全部范围。
使用Batch files中的参数:%0 and%9
Batch files can refer to the words passed in as parameters with the tokens:
1 2 3 4 | %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. |
参数通过在命令行中必须是字母数字字符,并由空间定义。自从
Example:
在一个叫
ZZU1
使用这类批量文件:EDOCX1&8)
1 | hello john billy |
Get more than 9 parameters for a batch file,use:%*
《穿透星球的火焰》你可以用一个环路抓住他们
http://www.robvanderwoude.com/parameters.php
关于删除批量参数的说明
Some characters in the command line parameters are ignored by batch files,depending on the dos version,whether they are"escaped"or not,and often depending on their location in the command line:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 |
批量文件自动地在程序后面经过如此长的时间,而它们的变量则可变地分配给它们。他们按顺序通过;E.G.%1将是程序后的第一个字符串,等等。
如果你有Hello.bat和内容是:
1 2 3 | @echo off echo.Hello, %1 thanks for running this batch file (%2) pause |
你通过指挥部召唤了船舱
hello.bat APerson241 %date%
你应该收到这个消息
您好,谢谢您运行这个蝙蝠侠文件(01/11/2013)
使用变量1.E.The
@乔恩的
假设我们想要实现一个实用程序
换句话说,它看起来是这样的:
1 | foobar <command> [--foo [<fooval>]] [--bar <barval>] [--baz] |
复杂的?不,这看起来很典型的现实生活中的公用事业。(有人吗?)
无需更多的麻烦,这里有一个解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | @ECHO OFF SETLOCAL REM FooBar parameter demo REM By Garret Wilson SET CMD=%~1 IF"%CMD%" =="" ( GOTO usage ) SET FOO= SET DEFAULT_FOO=default SET BAR= SET BAZ= SHIFT :args SET PARAM=%~1 SET ARG=%~2 IF"%PARAM%" =="--foo" ( SHIFT IF NOT"%ARG%" =="" ( IF NOT"%ARG:~0,2%" =="--" ( SET FOO=%ARG% SHIFT ) ELSE ( SET FOO=%DEFAULT_FOO% ) ) ELSE ( SET FOO=%DEFAULT_FOO% ) ) ELSE IF"%PARAM%" =="--bar" ( SHIFT IF NOT"%ARG%" =="" ( SET BAR=%ARG% SHIFT ) ELSE ( ECHO Missing bar value. 1>&2 ECHO: GOTO usage ) ) ELSE IF"%PARAM%" =="--baz" ( SHIFT SET BAZ=true ) ELSE IF"%PARAM%" =="" ( GOTO endargs ) ELSE ( ECHO Unrecognized option %1. 1>&2 ECHO: GOTO usage ) GOTO args :endargs ECHO Command: %CMD% IF NOT"%FOO%" =="" ( ECHO Foo: %FOO% ) IF NOT"%BAR%" =="" ( ECHO Bar: %BAR% ) IF"%BAZ%" =="true" ( ECHO Baz ) REM TODO do something with FOO, BAR, and/or BAZ GOTO :eof :usage ECHO FooBar ECHO Usage: foobar ^<command^> [--foo [^<fooval^>]] [--bar ^<barval^>] [--baz] EXIT /B 1 |
是的,真的很糟糕。请参阅我在https://stackoverflow.com/a/50653047/421049上的类似文章,在这里我提供了关于逻辑中发生的事情以及我为什么使用某些构造的更多分析。
丑陋的我今天要学的大部分。而且很痛。