我正在开发一个批处理文件,用作某些已编写的数据处理模块的包装器,目标是能够根据需要/处理能力允许并行运行某些模块,而串行运行其他模块。底层模块需要一个输入(双引号中包含的路径),以及可选的双引号和/或一组标志中包含的另一个路径,我正在尝试找出如何测试这些输入。我目前有
: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
如果以正确的顺序输入内容,这似乎可以正确解析所有内容。但是,我还想检查标志(前面带有“-”)是否作为第一个或第二个输入弹出,如果是,则根据需要显示使用消息/正确设置变量。我认为最简单的方法是查看这些字符串的第一个字符是否是“-”,但我找不到任何方法来做到这一点。我找到了一段代码,它通过用空字符串替换子字符串来检查字符串是否包含某个子字符串,然后查看结果字符串是否与原始字符串相同,但这不起作用,因为人们可能在其他地方合法地使用连字符在他们的路径中。有没有办法检查字符串的第一个字符是否与批处理文件中的给定字符匹配,或者有更好的方法来做我想要的事情?
最佳答案
您确实不需要在任何批处理文件参数中检查“-”,因为作为批处理文件创建者,您将知道可以处理哪些命令或不能处理哪些命令。意味着如果使用“-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 即可执行您想要的任何操作。
关于windows - 批处理文件: parsing command line inputs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693214/