判断批处理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

posted on 2021-01-20 11:56  jack_Meng  阅读(14121)  评论(0编辑  收藏  举报

导航