3 回答
TA贡献1784条经验 获得超9个赞
您可以使用:
IF "%~1" == "" GOTO MyLabel
去除外部引号。通常,与使用方括号相比,这是一种更可靠的方法,因为即使变量中有空格,该方法也将起作用。
TA贡献1797条经验 获得超6个赞
最好的半解决方案之一是将其复制%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!'
添加回答
举报