批处理文件第三个“If NOT”语句未达到

lbr*_*tdy 5 if-statement file batch-file

你好,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
Run Code Online (Sandbox Code Playgroud)

目前,有三个代码块,每个防病毒程序一个。仅当变量 %AVG% %MSE% 或 %NOD32% 不为空时才执行每个代码块,这意味着它们指向有效文件。我使用代码分配变量:

if exist "%programfiles(x86)%\AVG\AVG2012\avgscana.exe" set AVG="%programfiles(x86)%\AVG\AVG2012\avgscana.exe"
Run Code Online (Sandbox Code Playgroud)

所有三个代码块都运行良好,编码没有任何问题。问题是无论第三个块是什么,它永远不会执行。因此,在当前示例中,代码块按 MSE、AVG 和 NOD32 的顺序排列。NOD32 的代码块不执行,因为它是第三块。相反,如果我将这些块剪切并粘贴到另一个顺序中,而 AVG 的代码块是第三个块,它就不会执行。

有任何想法吗?

有什么建议?

编辑以澄清。

Han*_*ood 5

您在该行中缺少一个空格:

if not '%NOD32%'==''(
Run Code Online (Sandbox Code Playgroud)

尝试:

if not '%NOD32%'=='' (
Run Code Online (Sandbox Code Playgroud)

当我尝试脚本时,这一行导致失败。更改线路后,它起作用了。