Les Fichiers Batch troisième “Si NON” déclaration qui n'est pas atteint
Bonjour stackoverflow de la communauté,
Je suis en train d'écrire un fichier de commandes pour faire certaines automatique de la maintenance informatique et l'ont inclus plusieurs applications antivirus. Pour une raison quelconque, le troisième "si ce n'est" l'énoncé n'est jamais atteint.
: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
Actuellement, il y a trois blocs de codes, un pour chaque programme antivirus. Chaque bloc de code est exécuté uniquement lorsque la variable %MOY% %MSE% ou %NOD32% n'est pas vide, ce qui signifie qu'ils pointent vers un fichier valide. Je assigner les variables en utilisant le code:
if exist "%programfiles(x86)%\AVG\AVG2012\avgscana.exe" set AVG="%programfiles(x86)%\AVG\AVG2012\avgscana.exe"
Tous les trois blocs de code fonctionne parfaitement, rien n'est de mal avec le codage. Le problème, c'est que quel que soit le troisième bloc de l'est, il n'est jamais exécuté. Ainsi, dans l'exemple actuel, les blocs de code dans l'ordre de la MSE, AVG, et NOD32. NOD32 est un bloc de code ne s'exécute pas parce que c'est le troisième bloc. Inversement, si j'ai couper et coller les blocs dans un autre ordre avec AVG bloc de code étant le troisième bloc, il ne serait pas exécuter.
Des idées?
Des suggestions?
Édité pour plus de précisions.
OriginalL'auteur lbrtdy | 2011-11-25
Vous devez vous connecter pour publier un commentaire.
Il vous manque un espace dans la ligne:
Essayer:
Quand j'ai essayé le script de cette ligne a provoqué une défaillance. Après la modification de la ligne, il a travaillé.
OriginalL'auteur Hand-E-Food
Sont les variables
%MSE%
,%AVG%
ou%NOD32%
fichiers batch? Si oui, vous aurez besoin de les appeler à l'aide "d'appel" à la place (par exemplecall %AVG%
)Si vous appelez d'un fichier de commandes à partir d'un autre, la première sortie après l'exécution de la 2ème, sauf si elle est appelée avec "l'appel".
CALL
(niCMD /C
) de commande, le résultat net est équivalent à un "goto vers un autre fichier" (si une telle chose était possible). J'ai appelé Revêtement un fichier de commandes à l'évocation de cette façon (au lieu de sous-Routine).Les variables ne sont pas des fichiers batch. Ils se réfèrent à: if exist "%programfiles%\Microsoft Security Client\Antimalware\MPCMDRUN.EXE" ensemble MSE="%programfiles%\Microsoft Security Client\Antimalware\MPCMDRUN.EXE" Le script fonctionne parfaitement, c'est juste le troisième bloc n'est pas exécutée. Donc, si les blocs de code à partir de la MSE, AVG, NOD32, que NOD32 est un bloc de code ne serait pas exécuter, puisque c'est le troisième bloc. Inversement, si j'ai couper et coller les blocs dans un ordre différent si AVG est le dernier bloc, AVG bloc de code ne serait pas exécuter.
Il semble que si vous appelez d'un *.fichier bat à partir d'un autre *.le fichier bat, l'appelant l'un sortira après la deuxième (intérieure) fini. Ce qui m'a sauvé: l'appel doit être fait avec "l'appel interne.chauve-souris" au lieu de "intérieure.chauve-souris".
OriginalL'auteur JohnD
Faire tout de votre
%AVG%
,%NOD32%
, ou%MSE%
les variables ont des crochets? Pourraient-ils être dans leC:\Program Files (x86)\
chemin? Un support permet de fermer la succursale prématurément.Placer des guillemets autour de la partie exécutable de commandes, par exemple:
OriginalL'auteur Hand-E-Food