我想根据传入的命令行参数在DOS批处理文件中执行一些操作。
该批处理应使用任意数量的参数来调用。可能的参数应该是(最好是可扩展的):
UPDATE [-verbose [outputFileName]] [-validate] [/?]
此外,应该可以以任何顺序输入参数。特别是param -verbose很有趣:如果给定此参数,则以下'parameterParam'必须为outputfilename的名称,也可以为空。请注意,参数以“-”开头。参数自变量的参数没有前导“-”。
例如:
UPDATE -verbose -validate
应在STDOUT上显示执行步骤(-详细)并验证输入。
UPDATE -verbose outputFileName.txt -validate
应将执行步骤记录到名为<outputFilename.txt>(-verbose outputFileName.txt)的文件中,并验证输入。
UPDATE -validate
只能验证输入。
UPDATE -validate -verbose
应做与
UPDATE -verbose -validate
。
UPDATE /?
将显示如何使用update.bat
我怎样才能做到这一点?使用FOR循环遍历命令行参数?但是如何?我可以遍历参数,但是如果找到-verbose,如何预览以下参数以检查是否提供了文件名?
根据提供的参数,应执行特定操作(开始其他批处理...),我想通过java调用LiquiBase:
进行验证:
java -jar %LIQUIBASE_EXEC% --changeLogFile=../changesets/changelog-update.xml --logLevel=info validate
java -jar %LIQUIBASE_EXEC% --changeLogFile=../changesets/changelog-views-and-sp.xml --logLevel=info validate
对于离线SQL生成:
java -jar %LIQUIBASE_EXEC% --changeLogFile=../changesets/changelog-update.xml --logLevel=info updateSQL > update_%_outputfilename%
java -jar %LIQUIBASE_EXEC% --changeLogFile=../changesets/changelog-views-and-sp.xml --logLevel=info updateSQL > viewsAndSP_%_outputfilename%
@echo off
setlocal enableDelayedExpansion
set "_verbose=no"
set "_validate=no"
set "_outputfilename="
rem set "arg_counter=0"
set "_check_next=no"
if "%~1" equ "/?" call :help
for %%a in (%*) do (
if "!_check_next!" equ "yes" (
set "_check_next=no"
set "arg=%%~a"
if "!arg:~0,1!" neq "-" (
set "_outputfilename=%%~a"
) else (
if "%%~a" equ "-validate" (
set "_validate=yes"
)
)
)
rem if "%%~a" equ "/?" call :help
if "%%~a" equ "-verbose" (
set "_check_next=yes"
set "_verbose=yes"
)
if "%%~a" equ "-validate" (
set "_validate=yes"
)
)
echo --%_validate%--%_verbose%--%_outputfilename%--
endlocal
exit /b 0
:help
echo %~0 [-verbose [outputFileName]] [-validate] [/?]
echo some explanations
exit /b 0
参数的顺序不是要求的强制性。不确定其可扩展性,但即使在“严肃”的编程语言上,arg检查代码也总是很冗长。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句