你好,堆栈溢出社区,
我正在写一个批处理文件来做一些自动计算机维护,并包含了几个防病毒应用程序。由于某些原因,第三个"if not“语句永远不会出现。
: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的代码块是第三个块,它将不会执行。
有什么想法吗?
有什么建议吗?
为澄清而编辑。
发布于 2011-11-25 11:12:50
您在行中遗漏了一个空格:
if not '%NOD32%'==''(尝试:
if not '%NOD32%'=='' (当我尝试这个脚本时,这一行导致了一个失败。在改变线路后,它起作用了。
发布于 2011-11-25 08:54:07
变量是%MSE%、%AVG%还是%NOD32%批处理文件?如果是,则需要使用"call“来调用它们(例如call %AVG%)
如果从另一个批处理文件调用,第一个批处理文件将在执行第二个批处理文件后退出,除非使用" call“调用。
发布于 2011-11-25 08:54:26
您的%AVG%、%NOD32%或%MSE%变量中是否有括号?它们可能在C:\Program Files (x86)\路径中吗?支架将过早关闭分支。
在命令的可执行部分加上引号,例如:
"%MSE%" -Scan -ScanType 1https://stackoverflow.com/questions/8263821
复制相似问题