2011-01-03 8 views
3

Ich bin mit dem IF EXIST Batch-Datei-Befehl herumspielen, aber lief in ein Szenario. Was ich zu tun versucht, istIF EXIST zwei Verzeichnisse - nichts tun

IF C EXIST: \ Windows \ system32 Aufruf batchfile2

IF C EXIST: \ winnt \ system32 batchfile3

nennen

Aber es gibt Situationen, in denen beide Verzeichnisse auf PCs existieren wenn win2k auf XP aktualisiert wurde, anstatt auf eine neue XP-Installation. Was ich will, wenn es beide Verzeichnisse erkennt, ist "nichts zu tun", da die ersten beiden oben genannten Optionen sich bereits darum kümmern, was ich machen möchte. Kann mir jemand sagen, wie ich das manipulieren kann?

Neben den oben genannten, glaube ich, kann ich auch Unterprogramme innerhalb der gleichen Batch aufrufen, aber wie kann ich eine Subroutine erstellen, um das Skript zu beenden, wenn es erkennt sowohl "Windows \ system32" und "WINNT \ system32"?

IF EXISTS C: \ Windows \ system32 goto sub1 sonst gehe sub2

: sub1

: sub2

Vielen Dank im Voraus.

+0

ah 'goto', lange nicht gesehen! – miku

+1

Nicht so viel Auswahl in Batch, Sie :) – GolezTrol

+0

Jungs, ich danke Ihnen allen für Ihre wertvollen Eingaben. Ich habe einige Ihrer Eingaben in meine endgültige Batch-Datei eingefügt, die bisher sehr gut funktioniert. Ich habe ein Problem, es gibt Zeiten, in denen ein Host nicht erreichbar ist. Ich möchte meinen Stapel nicht zu kompliziert machen, dass er einen Host vor der Ausführung testen muss. Ich weiß, wenn ein Host ausfällt, wird auf dem Bildschirm "Dieser Handle ist ungültig" angezeigt. Wie erfasse ich diesen Parameter und echo "Host ist down" in meiner endgültigen Protokolldatei, so dass ich diese "down" Hosts leicht verfolgen kann? – molecule

Antwort

3

Ich bin mir nicht sicher, wann genau Sie welche Option ausführen möchten, aber Sie können GOTOS und Labels beliebig kombinieren. Ein wenig aufwendig, vielleicht, aber zumindest strukturiert:

@echo off 
IF EXIST C:\Windows\system32 goto windowsfound 
:afterwindows 
IF EXIST C:\WINNT\system32 goto winntfound 
:afterwinnt 
goto end 

:windowsfound 
IF EXIST C:\WINNT\system32 goto bothexist 
echo Windows folder found, do something. 
call batchfile2 
goto afterwindows 

:winntfound 
echo WINNT folder found, do something. 
call batchfile3 
goto afterwinnt 

:bothexist 
echo Both folders already exist. 
goto end 

:end 
echo Exiting. 

denke ich, wäre es möglich, auch für beide auf einer Zeile zu überprüfen:

@echo off 
IF EXIST C:\Windows\system32 IF EXIST C:\WINNT\system32 goto bothfound 

IF EXIST C:\Windows\system32 goto windowsfound 
IF EXIST C:\WINNT\system32 goto winntfound 

:windowsfound 
echo Windows folder found, do something. 
call batchfile2 
goto end 

:winntfound 
echo WINNT folder found, do something. 
call batchfile3 
goto end 

:bothexist 
echo Both folders already exist. 
goto end 

:end 
echo Exiting. 
-1

können Sie die "@ECHO OFF" entfernen ... die REM sind nur Kommentare in der Datei .. und die ECHO sind nur Dinge, die es ausgibt .. (Wenn Sie das Echo aus löschen, wird es alle anzeigen. .)

im Wesentlichen können Sie zu verschiedenen Abschnitten der Datei mit der Anweisung goto springen .. Sie verweisen nur auf ein goto label .. und später in der Datei verwenden Sie einen colen und den Markennamen als Anker/target/Label ...

@ECHO OFF 
REM Check to see if windows\system32 exists.. if so skip to the part 2 section 
IF EXIST C:\WINDOWS\system32 goto parttwo 

REM if windows\system32 didnt exist, it will check for the other dir... 
IF EXIST C:\WINNT\system32 goto partthree 


REM if we get to this point.. neither directory existed... so skip to a message about that 
goto neither 

:parttwo 
echo windows\system32 existed 
REM because it was not checked earlier, check to see if the second directroy exists 
IF EXIST C:\WINNT\system32 goto end 

echo windows\system32 existed, but winnt\system32 does not... 
echo do or call whatever for part 3.... 



goto end 



:partthree 
echo winnt\system32 existed 
echo do or call whatever for part three 




goto end 



:neither 
echo Could not find windows or winnt \system32 


:end 
echo goodbye 

Sie können immer MS für weitere Informationen getroffen up: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true

3

Ein einfacher Weg ist:

if exist c:\windows\system32 if exist c:\winnt\system32 goto morestuff 
if exist c:\windows\system32 call batchfile2 
if exist c:\winnt\system32 call batchfile3 
:morestuff 
...