• 判断批处理bat文件中参数%n是否为空的几种方法


    我需要测试是否设置了变量。我已经尝试了几种技术,但他们忽视了,只要%1用双引号包围时,如果%1是"c:some path with spaces"。

    IF NOT %1 GOTO MyLabel // This is invalid syntax

    IF "%1" == "" GOTO MyLabel // Works unless %1 has double quotes which fatally kills bat execution

    IF %1 == GOTO MyLabel // Gives an unexpected GOTO error.

    根据本站点的介绍,这些是受支持的IF语法类型。因此,我没有找到一种方法。使用 IF /?可以查看使用说明

    IF [NOT] ERRORLEVEL number command //常用于错误号的比较,需要配合    EQU-等于;    NEQ-不等于;    LSS-小于;    LEQ-小于或等于;    GTR-大于;    GEQ-大于或等于

    IF [NOT] string1==string2 command  //常用于字符串的比较,常配合/I参数强制字符串比较

    IF [NOT] EXIST filename command  //常用于判断文件,例如参数传入的是文件或路径

    ------------------------------------------------

    牧羊人nacy

    使用方括号代替引号:

    IF [%1] == [] GOTO MyLabel

    括号不安全:只能使用方括号。

    ------------------------------------------------

    千万里不及你

    您可以使用:

    IF "%~1" == "" GOTO MyLabel

    去除外部引号。通常,与使用方括号相比,这是一种更可靠的方法,因为即使变量中有空格,该方法也将起作用。

    ------------------------------------------------

    FFIVE

    最好的半解决方案之一是将其复制%1到变量中,然后使用延迟扩展(如delayExp)。对任何内容始终是安全的。

    set "param1=%~1"

    setlocal EnableDelayedExpansion

    if "!param1!"=="" ( echo it is empty )

    rem ... or use the DEFINED keyword now

    if defined param1 echo There is something

    这样的好处是处理param1是绝对安全的。

    而且param1的设置在很多情况下都可以使用,例如

    test.bat hello"this is"a"test

    test.bat you^&me

    但是它会失败,并带有诸如

    test.bat "&"^&

    为了能够获得100%正确的存在答案,您可以使用此代码块,

    它检测是否%1为空,但是对于某些内容,它无法获取内容。

    这对于区分空值%1和带的值也很有用""。

    它使用CALL命令的能力而不会中止批处理文件而失败。

    @echo off

    setlocal EnableDelayedExpansion

    set "arg1="

    call set "arg1=%%1"

    if defined arg1 goto :arg_exists

    set "arg1=#"

    call set "arg1=%%1"

    if "!arg1!" EQU "#" (

        echo arg1 exists, but can't assigned to a variable

        REM Try to fetch it

        call set arg1=%%1

        goto :arg_exists

    )

    echo arg1 is missing

    exit /b

    :arg_exists

    echo arg1 exists, perhaps the content is '!arg1!'

    出处:https://www.imooc.com/wenda/detail/606826


    bat %n 判断传入的参数值和使用注意

    if "%1" == "" echo empty 1

    if exist "%1" echo 1path exist

    注意:要加上双引号"",不然如果传入的参数是空的话,会导致bat闪退,因为如果是空,而没有双引号,那么就变成 if == "" echo empty 1,这是语法错误,如果有双引号,那么就是 if "" == "" echo empty 1

    出处:https://www.cnblogs.com/ibingshan/p/11155983.html

    您的资助是我最大的动力!
    金额随意,欢迎来赏!
    款后有任何问题请给我留言。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

    如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

  • 相关阅读:
    (Tree) 101. Symmetric Tree
    (String). Word Pattern
    (Array)121. Best Time to Buy and Sell Stock
    (Array)169. Majority Element
    记录一次工作问题总结——关于游戏物体渲染顺序
    C++——STL(算法)
    观察者设计模式
    二分查找——校招题
    排序算法——归并排序
    排序算法——堆排序
  • 原文地址:https://www.cnblogs.com/mq0036/p/14302088.html
Copyright © 2020-2023  润新知