2011-11-25 42 views
4

你好計算器社區,批處理文件第三「如果不是」聲明沒有達到

我寫一個批處理文件做一些計算機自動維護,幷包括一些防病毒應用程序。出於某種原因,第三個「如果不是」的聲明永遠不會達成。

:AV 
REM MSE 
if not '%MSE%'=='' (
Echo Scanning for viruses using Microsoft Security Essentials. 
Echo. 
%MSE% -Scan -ScanType 1 
Echo. 
GOTO Defrag 
) 

REM AVG 
if not '%AVG%'=='' (
Echo Scanning for viruses using AVG. 
Echo. 
%AVG% /COMP /QT /TRASH 
Echo. 
GOTO Defrag 
) 

REM NOD32 
if not '%NOD32%'==''(
Echo Scanning for viruses using NOD32. 
Echo. 
if '%NOD32%'=='' GOTO NOD32NotFound 
%NOD32% /aind /auto /log-file="%userprofile%\Desktop\Scan_Results.txt" 
Echo. 
GOTO Defrag 
) 

REM If all else fails... 
GOTO AVNotFound 

目前,有三個區塊碼,每一個防病毒程序。每個代碼塊只在變量%AVG%%MSE%或%NOD32%不爲空時執行,這意味着它們指向一個有效的文件。我給你使用的代碼中的變量:

if exist "%programfiles(x86)%\AVG\AVG2012\avgscana.exe" set AVG="%programfiles(x86)%\AVG\AVG2012\avgscana.exe" 

的代碼全部三塊完美的作品,沒有什麼是錯的編碼。問題是無論第三塊是什麼,它都不會執行。所以在當前的例子中,代碼塊按照MSE,AVG和NOD32的順序排列。 NOD32的代碼塊不會執行,因爲它是第三個塊。相反,如果我使用AVG的代碼塊作爲第三個塊,將塊剪切並粘貼到另一個順序,它將不會執行。

任何想法?

有什麼建議嗎?

編輯澄清。

回答

2

你錯過了在該行的空間:

if not '%NOD32%'==''(

嘗試:

if not '%NOD32%'=='' (

當我嘗試腳本時,此行導致失敗。改變線後,它工作。

2

是變量%MSE%%AVG%%NOD32%批處理文件?如果是,則需要使用「call」調用它們(例如call %AVG%

如果您從另一個調用批處理文件,第一個執行第二個文件後將退出,除非使用「call 」。

+0

如果從第一個沒有'CALL'(也不是'CMD/C')命令的第一批文件被調用,則最終結果等同於「轉到另一個文件」(如果可能的話) 。我調用*覆蓋*這種方式調用批處理文件(而不是*子例程*)。 – Aacini

+0

變量不是批處理文件。它們是指: 如果存在「%programfiles%\ Microsoft安全客戶端\反惡意軟件\ MPCMDRUN.EXE」設置MSE =「%programfiles%\ Microsoft安全客戶端\反惡意軟件\ MPCMDRUN.EXE」 腳本完美地工作,它只是第三塊不執行。因此,如果代碼塊來自MSE,AVG,NOD32,則NOD32的代碼塊將不會執行,因爲它是第三個塊。相反,如果我將塊剪切並粘貼到不同的順序,以便AVG是最後一個塊,AVG的代碼塊將不會執行。 – lbrtdy

+0

看起來,如果你從另一個*調用一個* .bat文件。bat文件,調用者將在第二個(內部)完成後退出。這救了我:呼叫必須用「呼叫inner.bat」而不是「inner.bat」來完成。 –

0

做任何你的%AVG%,%NOD32%%MSE%變量中有括號嗎?他們可以在C:\Program Files (x86)\路徑嗎?托架會過早地關閉分支。周圍的命令的可執行部分

廣場引號,例如:

"%MSE%" -Scan -ScanType 1 
+0

變量可以包含括號,但我將變量編碼爲括號中已包含的字符串: 如果存在「%programfiles(x86)%\ AVG \ AVG2012 \ avgscana.exe」set AVG =「%programfiles(x86)% \ AVG \ AVG2012 \ avgscana.exe「 單個代碼塊工作得很好,只是第三個塊永遠不會執行。因此,如果代碼塊來自MSE,AVG,NOD32,則NOD32的代碼塊將不會執行,因爲它是第三個塊。相反,如果我將塊剪切並粘貼到不同的順序,以便AVG是最後一個塊,AVG的代碼塊將不會執行。 – lbrtdy

相關問題