批处理:检查批处理文件中的命令行参数

杜特

我想根据传入的命令行参数在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

更新批处理文件中的命令行参数

如何串联批处理文件的命令行参数?

批处理文件中的%*是否表示所有命令行参数?

如何将命令行参数传递给Windows批处理文件中的程序?

批处理文件中的%*是否表示所有命令行参数?

在Windows命令行中在批处理文件中使用参数

批处理文件:在命令行中使用Loop

命令在命令行上运行,但不在批处理文件中

循环/ D标志的批处理文件未出现在命令行中

在Windows批处理文件中通过命令行ftp使用%USERNAME%环境变量

在批处理文件中获取原始参数或命令

使用批处理文件运行时,java命令行参数缺少特殊字符,如!,#

命令行参数缺少特殊字符,如!通过Inno Setup通过批处理文件运行时

在批处理文件中,我想运行包含文本文件中包含的命令行参数的exe。

命令在命令行上工作,但在批处理文件中意外运行

在批处理文件中运行命令

命令行/批处理文件列出所有jar文件?

如何在Windows命令行或批处理文件中在字符串中搜索斜杠或冒号?

在Windows命令行中更改时间变量的时间输出以在批处理文件中使用

如何将生成后事件命令行传输到MsBuild中的批处理文件?

是否可以在Windows命令行中编写一个小的(5行-或更多)批处理文件?

在Inno Setup中如何在不使用批处理文件的情况下执行命令行工具

如何使用命令行创建批处理文件?

通过命令行/批处理文件登录Azure FTP失败

如何从批处理文件启动Powershell命令行并强制其保持打开状态?

命令行批处理文件-定义几种自定义

为什么此命令行(批处理文件)不起作用?

通过批处理文件从命令行输出中提取数字

通过命令行(批处理文件)更改注册表权限