亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試批處理文件中參數是否為空的正確方法是什么?

測試批處理文件中參數是否為空的正確方法是什么?

當年話下 2019-12-12 14:55:56
我需要測試是否設置了變量。我已經嘗試了幾種技術,但他們忽視了,只要%1用雙引號包圍時,如情況%1是"c:\some path with spaces"。IF NOT %1 GOTO MyLabel // This is invalid syntaxIF "%1" == "" GOTO MyLabel // Works unless %1 has double quotes which fatally kills bat executionIF %1 == GOTO MyLabel // Gives an unexpected GOTO error.根據本站點的介紹,這些是受支持的IF語法類型。因此,我沒有找到一種方法。IF [NOT] ERRORLEVEL number commandIF [NOT] string1==string2 commandIF [NOT] EXIST filename command
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

使用方括號代替引號:


IF [%1] == [] GOTO MyLabel

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


查看完整回答
反對 回復 2019-12-12
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您可以使用:


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

去除外部引號。通常,與使用方括號相比,這是一種更可靠的方法,因為即使變量中有空格,該方法也將起作用。


查看完整回答
反對 回復 2019-12-12
?
FFIVE

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!'


查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關注
  • 1853 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號