AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 118272
Accepted
Shiraz Bhaiji
Shiraz Bhaiji
Asked: 2010-03-03 04:50:38 +0800 CST2010-03-03 04:50:38 +0800 CST 2010-03-03 04:50:38 +0800 CST

检查 DOS 批处理文件中的参数

  • 772

我们有一个带有参数的批处理文件。

然后我们使用 %1 作为第一个参数来读取参数的值。

问题是:我们如何检查 %1 是否有值?

batch-file ms-dos
  • 4 4 个回答
  • 16126 Views

4 个回答

  • Voted
  1. R-D
    2010-03-03T05:10:31+08:002010-03-03T05:10:31+08:00

    根据http://www.robvanderwoude.com/parameters.php你可以用 if 检查它们:

    • IF "%1"=="" 用于未引用的参数

    或者

    • 如果 [%1]==[]

    或者

    • IF "%~1"=="" (仅限 NT4+SP6 及更高版本)
    • 6
  2. Best Answer
    dsolimano
    2010-03-03T05:14:55+08:002010-03-03T05:14:55+08:00

    您可以在 %1 的值上进行分支。例如,一种方法是

    if "%1"=="" goto bad
    
    :good
    
    rem Do processing here
    
    goto end
    
    :bad
    
    rem Do error handling here
    
    :end
    
    • 3
  3. HighDesertRaider
    2012-02-22T17:25:49+08:002012-02-22T17:25:49+08:00

    所以这是我对这个问题的解决方案。我已经使用这种样式来使用传统位置值的“命名参数”。这样,可以在默认和使用的参数上进行验证。

    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: batchparms.bat = This is an example of named parameters in a batch file. ::
    :: This demonstrates the ability to name parameters instead of the current  ::
    :: positional restrictions provided natively.                   ::
    ::                                      ::
    :: Parameters:                                  ::
    :: -first   = First named parm. Should be AAA BBB or CCC [Default is AAA]   ::
    :: -second  = Second named parm. Should be XXX YYY or ZZZ [Default is ZZZ]  ::
    :: -flagone = First named switch [Default is TRUE]              ::
    :: -flagtwo = Second named switch [Default is TRUE]             ::
    ::                                      ::
    :: 02/19/2010   - HighDesertRaider                      ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    ::                                      ::
    :: 02/22/2012   - Modified to be used as a Demo                 ::
    ::      - HighDesertRaider                      ::
    ::                                      ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    ::
    :: Set Environment
    ::
    :: These flags need to be set off to use named parameters
    ::
    SET FLAG_FIRST=0
    SET FLAG_SECOND=0
    SET FLAG_ONE=0
    SET FLAG_TWO=0
    ::
    :: Set Default Values
    ::
    CLS
    SET PARM_FIRST=AAA
    SET PARM_SECOND=ZZZ
    SET PARM_ONE=1
    SET PARM_TWO=1
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Parse the input parameters, and assign the arguments to variables.       ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    FOR %%A in (%*) DO (
    IF !FLAG_FIRST!==1 (
      SET PARM_FIRST=%%A
      SET FLAG_FIRST=0
    ) ELSE (
    IF !FLAG_SECOND!==1 (
      SET PARM_SECOND=%%A
      SET FLAG_SECOND=0
    ) ELSE (
    IF /I %%A==-FIRST (
      SET FLAG_FIRST=1
    ) ELSE (
    IF /I %%A==-SECOND (
      SET FLAG_SECOND=1
    ) ELSE (
    IF /I %%A==-FLAGONE (
      SET PARM_ONE=0
    ) ELSE (
    IF /I %%A==-FLAGTWO (
      SET PARM_TWO=0
    ) ELSE (
      SET BADPARMMSG=Parameter %%A is not a valid option.
      GOTO:BadFormExit)))))))
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Validate -ParmFirst                              ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :ValidateParmFirst
    ECHO  Validate -ParmFirst %PARM_FIRST%
    FOR %%A in (AAA BBB CCC) DO (
        IF /I %PARM_FIRST%==%%A (
            GOTO ValidParmFirst))
    ::
    :: A Valid Parm Value was not found in the list
    ::
    SET BADPARMMSG=Value %PARM_FIRST% is not a valid value for -ParmFirst
    ECHO Please select one of the following values:
    ECHO AAA
    ECHO BBB
    ECHO CCC
    GOTO BadFormExit
    :ValidParmFirst
    ECHO  Value %PARM_FIRST% is valid for -ParmFirst
    ECHO.
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Validate -ParmSecond                             ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :ValidateParmSecond
    ECHO  Validate -ParmSecond %PARM_SECOND%
    FOR %%A in (XXX YYY ZZZ) DO (
        IF /I %PARM_SECOND%==%%A (
            GOTO ValidParmSecond))
    ::
    :: A Valid Parm Value was not found in the list
    ::
    SET BADPARMMSG=Value %PARM_FIRST% is not a valid value for -ParmSecond
    ECHO Please select one of the following values:
    ECHO XXX
    ECHO YYY
    ECHO ZZZ
    GOTO BadFormExit
    :ValidParmSecond
    ECHO  Value %PARM_SECOND% is valid for -ParmSecond
    ECHO.
    ::
    ::
    ::
    ECHO.
    ECHO The value of -first is %PARM_FIRST%
    ECHO The value of -second is %PARM_SECOND%
    ECHO The value of -flagone is %PARM_ONE%
    ECHO The value of -flagtwo is %PARM_TWO%
    ECHO.
    GOTO:RunMyCodeCauseIGotGoodParms
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: This function shows the user the correct form to use             ::
    ::  and exits the script.                           ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :BadFormExit
    ECHO.
    ECHO  Sorry friend, but your form is bad.
    ECHO.
    ECHO  batchparms.bat %* is not correct.
    ECHO  Reason: %BADPARMMSG%
    ECHO. 
    ECHO  the correct syntax for this command is:
    ECHO "batchparms.bat [-first AAA | BBB | CCC] [-second XXX | YYY | ZZZ] [-flagone] [-flagtwo]"
    EXIT /B 1
    :RunMyCodeCauseIGotGoodParms
    ::
    :: Insert Code Here to Run once Parms are Validated
    ::
    EXIT /B
    

    参数值可以列在一个文件中,这样您就不必更改批处理文件,只需添加一个新值。并且可以添加更多文本来解释值等。

    • 2
  4. gaotter
    2010-03-03T05:17:38+08:002010-03-03T05:17:38+08:00

    你可以试试这个

    设置测试=%1

    如果 %test%.==. (未设置回声测试)

    • 0

相关问题

  • 只删除 ASP 文件

  • 在 bat 文件中等待几秒钟的更好方法?[复制]

  • 如何编写dos批处理脚本来创建文件夹结构?

  • 使用 XCACLS 设置长文件名的权限

  • 如何将程序输出通过管道传输到屏幕和 Windows 下的文件 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve