批处理文件:解析命令行输入

时间:2012-05-21 21:56:36

标签: windows batch-file validation

我正在处理一个批处理文件,用作已经编写的一些数据处理模块的包装器,其目标是能够并行地运行一些数据处理模块,并且根据需要连续运行其他数据处理模块。底层模块需要一个输入(双引号中包含的路径),并且可选地包含双引号和/或一组标志中的另一个路径,我试图弄清楚如何测试这些输入。我目前有

:TEST_PARAMS
REM Make sure parameters are correct; if not, display a usage message
IF NOT "%1"=="" (SET SUBBASENAME=%1
) ELSE (
    GOTO :USAGE
)
IF NOT "%2"=="" (SET ATLASBASENAME=%2
) ELSE (
    SET ATLASBASENAME=%DEFAULTATLAS%
)
IF NOT "%3"=="" (SET FLAGS=%3
) ELSE (
    SET FLAGS=""
)
GOTO :START_SVREG

如果以正确的顺序输入内容,这似乎可以正确解析所有内容。但是,我还想检查标志(将以' - '开头)是否弹出作为第一个或第二个输入,如果是,则显示使用消息/根据需要正确设置变量。我认为最简单的方法是查看这些字符串的第一个字符是否为“ - ”,但我找不到任何方法来执行此操作。我找到了一段代码,通过用空字符串替换子字符串来检查字符串是否包含某个子字符串,然后查看结果字符串是否与原始字符串相同,但这不起作用,因为人们可能合法地在其他地方使用连字符在他们的路径中。有没有办法检查字符串的第一个字符是否与批处理文件中的给定字符匹配,还是更好的方式来做我想做的事情?

2 个答案:

答案 0 :(得分:1)

您可以将参数传递给环境变量,然后使用SET子字符串操作查看第一个字符。 (从命令行键入HELP SET以获取有关子字符串操作的信息)

@echo off
set "var=%~1"
if defined var if "%var:~0,1%" equ "-" echo arg 1 is a flag

答案 1 :(得分:0)

您真的不需要在任何批处理文件参数中检查“ - ”,因为作为批处理文件创建者,您将知道可以处理哪些命令。意味着如果使用“-b”然后你知道如何处理它,或者如果用户通过“-t”你将知道如何处理。在批处理文件中,您只需要处理所有参数,无论它们是以何种顺序,并且在批处理文件中,您将有部分处理它。下面是一个示例批处理文件,可以使用“ - ”或“/”处理任意数量的参数:

@echo off

if [%1]==[] goto usage
:CHECKFORSWITCHES
@echo Execute the Command
IF '%1'=='/param1' GOTO PARAM1
IF '%1'=='-param2' GOTO PARAM2
IF '%1'=='/param3' GOTO PARAM3
IF '%1'=='-param4' GOTO PARAM4
IF '%1'=='/param5' GOTO PARAM5
goto :eof

:PARAM1
@echo This is Param1
set var=%1
set var2=%var:~0,1%
echo %var2%
SHIFT
goto :CHECKFORSWITCHES
:PARAM2
@echo This is Param2
SHIFT
goto :CHECKFORSWITCHES
:PARAM3
@echo This is Param3
SHIFT
goto :CHECKFORSWITCHES
:PARAM4
@echo This is Param4
set var=%1
set var2=%var:~0,1%
echo %var2%
SHIFT
goto :CHECKFORSWITCHES
:PARAM5
@echo This is Param5
SHIFT
goto :CHECKFORSWITCHES
:usage
@echo Usage: %0 ^<Write your command here^>
exit /B 1

上面的脚本还检查任何参数的第一个字符,所以如果你需要单独使用那个代码,你肯定可以使用它,但我不认为这是一个好方法。

如果你需要写一些基于“ - ”或“/”的逻辑,只需使用IF%var2%=='/“GOTO XXX,你可以做任何你想要的事情。