2012-05-21 41 views
1

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

: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 

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

回答

1

你。可以将参数(在命令行HELP SET类型来获取信息有关的子字符串操作)转移到一个环境变量,然后使用一组串操作来看看第一个字符。

@echo off 
set "var=%~1" 
if defined var if "%var:~0,1%" equ "-" echo arg 1 is a flag 
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,你可以做任何你正在寻找

+0

感谢您的答复。我” m使用批处理文件作为一种用Matlab编译的模块的接口,所以它实际上并没有对标记做任何事情 - 只要它们存在就会通过它们。 ach模块进行自己的检查,但我希望在调用它们之前能够检查,以便用户不会收到使用消息。 – ackrause