寻找Unix风格';getopt';Windows批处理文件中的命令行分析

寻找Unix风格';getopt';Windows批处理文件中的命令行分析,windows,parsing,batch-file,command-line,cmd,Windows,Parsing,Batch File,Command Line,Cmd,有谁能帮我找到一些东西来解析Windows批处理文件中的命令行参数,就像使用getopt/getopts在Unix shell脚本中一样?它不一定都是Posix-y;我可以指定我期望的开关,它们中的哪一个需要/允许参数。它们不需要是“长”开关;单个字符就行了 它可以是批处理文件调用的外部.exe。它必须是可自由分发的。在Unix/Linux中,没有像getopt/getopts那样解析命令行参数的东西 批处理文件只知道%0,%1,%2。。。和%*(以及%~0,%~1…等变体,如果arg周围有引号

有谁能帮我找到一些东西来解析Windows批处理文件中的命令行参数,就像使用getopt/getopts在Unix shell脚本中一样?它不一定都是Posix-y;我可以指定我期望的开关,它们中的哪一个需要/允许参数。它们不需要是“长”开关;单个字符就行了


它可以是批处理文件调用的外部.exe。它必须是可自由分发的。

在Unix/Linux中,没有像getopt/getopts那样解析命令行参数的东西

批处理文件只知道
%0
%1
%2
。。。和
%*
(以及
%~0
%~1
…等变体,如果arg周围有引号,它们会删除引号)

最多九个参数。如果还有更多的数据需要处理,您可以使用
shift
(相当于
shift/1
如果
enableextensions
发生)删除第一个参数并移动其余参数

基本上就是这样



(也许你应该更详细地解释你想用批处理实现什么,为什么你必须使用批处理,以及你的其他外部约束是什么。)

你可以这样做(-h没有参数,因此之后没有移位,-b和-s取其他参数,所以移位它们)


我认为这是正确的答案:值得在此添加/I支持不区分大小写的比较-因此-s和-s都将支持SQL行-并且可能不适合所有情况。
:GETOPTS
 if /I "%1" == "-h" goto Help
 if /I "%1" == "-b" set BASE=%2 & shift
 if /I "%1" == "-s" set SQL=%2 & shift
 shift
if not "%1" == "" goto GETOPTS