你好計算器社區,批處理文件第三「如果不是」聲明沒有達到
我寫一個批處理文件做一些計算機自動維護,幷包括一些防病毒應用程序。出於某種原因,第三個「如果不是」的聲明永遠不會達成。
: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的代碼塊作爲第三個塊,將塊剪切並粘貼到另一個順序,它將不會執行。
任何想法?
有什麼建議嗎?
編輯澄清。
如果從第一個沒有'CALL'(也不是'CMD/C')命令的第一批文件被調用,則最終結果等同於「轉到另一個文件」(如果可能的話) 。我調用*覆蓋*這種方式調用批處理文件(而不是*子例程*)。 – Aacini
變量不是批處理文件。它們是指: 如果存在「%programfiles%\ Microsoft安全客戶端\反惡意軟件\ MPCMDRUN.EXE」設置MSE =「%programfiles%\ Microsoft安全客戶端\反惡意軟件\ MPCMDRUN.EXE」 腳本完美地工作,它只是第三塊不執行。因此,如果代碼塊來自MSE,AVG,NOD32,則NOD32的代碼塊將不會執行,因爲它是第三個塊。相反,如果我將塊剪切並粘貼到不同的順序,以便AVG是最後一個塊,AVG的代碼塊將不會執行。 – lbrtdy
看起來,如果你從另一個*調用一個* .bat文件。bat文件,調用者將在第二個(內部)完成後退出。這救了我:呼叫必須用「呼叫inner.bat」而不是「inner.bat」來完成。 –