使用以下內容創建一個批處理文件:批處理腳本:爲什麼此條件評估爲true?
@echo off
setlocal
echo %1
if [%1] == [] echo hi
然後在命令提示符下運行它像這樣:
script.cmd ==
它將輸出如下:
ECHO is off.
hi
爲什麼這個,它是如何發生的?另外,如何更可靠地檢查批處理腳本中的空字符串?
謝謝。
使用以下內容創建一個批處理文件:批處理腳本:爲什麼此條件評估爲true?
@echo off
setlocal
echo %1
if [%1] == [] echo hi
然後在命令提示符下運行它像這樣:
script.cmd ==
它將輸出如下:
ECHO is off.
hi
爲什麼這個,它是如何發生的?另外,如何更可靠地檢查批處理腳本中的空字符串?
謝謝。
在這種情況下,我建議使用下列內容:
@echo off
setlocal
echo(%~1
if "%~1"=="" echo hi
而不是script.cmd ==
使用script.cmd "=="
請注意,我用echo(
如果變量被認爲是空的,這將呼應換行,並我使用了%~1
,它從%1
參數中刪除了周圍的引號。
您需要周圍的引號,因爲equal-sign is treated as a delimeter in the arguments除非在引號內,就像空格一樣。
有趣!我不知道'echo.'技巧。感謝您的簡潔/內容豐富的答案! –
對Dostips進行了大量討論,如果有一個名爲echo的文件是目錄,'echo.'可能會產生意想不到的結果。最好使用'echo('。 – SomethingDark
@SomethingDark你正在談論[this](http://www.dostips.com/forum/viewtopic.php?f=3&t=774&start=0&hilit=echo+blank+line )我想呢?我以前沒有讀過它,但是在閱讀完它之後,我同意使用'echo('確實更好。 –
@ECHO OFF
SETLOCAL
SET "cmdtail=%*"
ECHO(%cmdtail%
IF "%cmdtail%"=="==" ECHO two "="
但是回到未指明的原始問題。
請注意,此語法將檢測作爲命令尾提供的==
,而%~1
將不計算爲==
。
核心問題是'='符號與_space_,_tab_,','和';'一樣構成了一個標記分隔符,因此腳本的行爲與沒有給出的參數一樣;把它放在''''之間'廢除它們的特殊含義並且保持字面意思;使用'%〜1'訪問參數將刪除引號...... – aschipfl