views:

148

answers:

2

Can anyone help me find something to parse command line args in a dos batch file like one would do in a unix shell script using getopt/getopts? It doesn't have to be all posix-y; just something that I can specify what switches I expect, which of them require/allow an argument. They don't need to be "long" switches; single characters will work.

It can be an external .exe that the batch file calls. It has to be freely distributable.

A: 

There is no such thing as getopt/getopts-like parsing of commandline arguments as you know from Unix/Linux.

Batch files only know about %0, %1, %2, ... and %* (and such variations as %~0, %~1... which remove quotes, should there be ones around an arg).

Up to nine arguments. If there are more to process, you can use shift (equiv. to shift /1 if enableextensions happened) to remove the first arg and shift the rest.

Basically that's it.


(Maybe you should explain more what exactly you are trying to achieve with the batch, why you must use batch, and what your other external constraints are.)

pipitas
A: 

You can you something like this (-h has no args, hence no shift after that, -b and -s take additional args, so shift them)

: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
Kris