批处理文件第三个“如果没有”语句未达到

时间:2011-11-25 00:42:28

标签: file batch-file if-statement

Hello stackoverflow社区,

我正在编写一个批处理文件来进行一些自动计算机维护,并且包含了几个防病毒应用程序。出于某种原因,永远不会达到第三个“如果不是”的陈述。

: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的代码块是第三个块,则它将不会执行。

有什么想法吗?

有什么建议吗?

编辑澄清。

3 个答案:

答案 0 :(得分:3)

你错过了一行中的空格:

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

尝试:

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

当我尝试脚本时,此行导致失败。更改线后,它有效。

答案 1 :(得分:2)

变量是%MSE%%AVG%还是%NOD32%批处理文件?如果是,则需要使用“call”来调用它们(例如call %AVG%

如果你从另一个调用批处理文件,第一个将在执行第二个之后退出,除非用“call”调用它。

答案 2 :(得分:0)

您的%AVG%%NOD32%%MSE%个变量中是否包含括号?他们可以在C:\Program Files (x86)\路径吗?支架会过早地关闭分支。

在命令的可执行部分周围放置引号,例如:

"%MSE%" -Scan -ScanType 1