判断批处理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
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/14302088.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2021-01-20 11:56 jack_Meng 阅读(14121) 评论(0) 编辑 收藏 举报