我想以下列方式创建自己的命令,我希望从批处理和cmd.exe中运行:
fake-command -name <some value> -age <some Value>
目前我知道要创建一个命令如下:
fake-command <some value> <another Value>
之后,我可以将输入收集为%1
和%2
。但这并不是一种有效的方法,因为如果我期望输入的顺序发生变化并且有人在名字之前进入年龄,会发生什么。
所以我有两个问题:
答案 0 :(得分:4)
@ECHO OFF
SETLOCAL
SET "switches=name age whatever"
SET "noargs=option anotheroption"
SET "swindicators=/ -"
SET "otherparameters="
:: clear switches
FOR %%a IN (%switches% %noargs%) DO SET "%%a="
:swloop
IF "%~1"=="" GOTO process
FOR %%a IN (%swindicators%) DO (
FOR %%b IN (%noargs%) DO (
IF /i "%%a%%b"=="%~1" SET "%%b=Y"&shift&GOTO swloop
)
FOR %%b IN (%switches%) DO (
IF /i "%%a%%b"=="%~1" SET "%%b=%~2"&shift&shift&GOTO swloop
)
)
SET "otherparameters=%otherparameters% %1"
SHIFT
GOTO swloop
:process
FOR %%a IN (%switches% %noargs% otherparameters) DO IF DEFINED %%a (CALL ECHO %%a=%%%%a%%) ELSE (ECHO %%a NOT defined)
GOTO :EOF
这是一个演示。
鉴于你有3个开关,名称 年龄 接受一个参数和两个真正的开关,选项和 anotheroption ,不带参数,然后以
运行上述过程 q27497516 -age 92 / option goosefeathers / name fred
(q27497516.bat在这里是我的蝙蝠侠)会产生
name=fred
age=92
whatever NOT defined
option=Y
anotheroption NOT defined
otherparameters= goosefeathers
惯例是使用/
作为切换指示符 - 前导-
对于文件名是合法的。实现取决于程序员的心血来潮。上述结构将允许任何字符 - 在cmd
的语法规则中,自然地[即。 $ _#OK,%!^不,!也许()尴尬]