2013-11-21 45 views
1

我有如下的批處理代碼:批次 - 檢查是否變量是不是空的,執行操作

set checkerr= 
for /f "delims=" %%a in ('findstr "Error" %LOG%') do @set checkerr=%%a 


echo %checkerr% 


if "%checkerr%" NEQ [] GOTO sendmail 

但它不工作,我希望它發送郵件只有文本字符串「錯誤」在日誌文件中找到

注:在日誌文件中的錯誤可能是這樣的:

20131117185439:  Error: Field not found - <blablabla> 
20131117185445:  General Script Error 
20131117185445:  Execution Failed 
20131117185445:  Execution finished. 

所以有空格和其他字符等

問候

+0

'「」'不是'[]',所以當然它總是不等於。使用一個或另一個。但是,你真的應該使用foxidrive的解決方案 - 這是一個更好的方法。 – dbenham

+0

事情是我已經嘗試過與「」,但有錯誤。我結束了使用foxdrive的解決方案。謝謝 – anarchist

+0

另外,初始化checkerr時可能會有尾隨空格。最好使用'set「checkerr =」',然後用'if'%checkerr%「NEQ」「goto sendmail」。永遠不會,foxiderive的答案仍然是要走的路:-) – dbenham

回答

3

&&操作者執行在由前述命令生成錯誤級別零下面的命令,所以這應該是等效和當「錯誤」在日誌文件中發現將跳轉到:sendmail標籤。

findstr "Error" "%LOG%" >nul && goto :sendmail 

同伴操作者即||和此上的錯誤級別不爲零執行以下命令。

要檢查一個變量是空的,你可以使用這個:

if not defined variablename goto :sendmail 
+0

嗨,謝謝你的答案,我把它設置爲:findstr「Error」「%LOG%」> nul && goto:sendmail,但是甚至儘管日誌不包含字符串,但它發送到sendmail – anarchist

+0

在添加的行之後沒有':sendmail'標籤?因爲在那種情況下,它會每次執行。 – foxidrive

+0

是的,有。我做的是:findstr「Error」「%LOG%」> nul && goto:sendmail 轉到:eof :sendmail ... 它現在可以工作,謝謝 – anarchist