wake-up-neo.com

IF EXIST C:\Verzeichnis\goto ein anderes goto b Probleme Windows XP Batchdateien

wann immer ich die Variable code ausführt, wird mir aufgefallen, dass ich einen Fehler mit den if-Zeilen gemacht habe. Egal, ob das Verzeichnis existiert oder nicht, es wirkt so, als wäre die Zeile nie da ... entweder das oder das nicht andere Linie.


echo off  
echo  
echo (c) Ryan Leach 2010  
echo Stockmaster Backup System for exclusive use of Riverland Paper Supplies  
echo  
echo Please ensure that all computers are out of stock master to the windows xp screen  
echo and that the backup usb with the day of the week labeled on it is inserted  

pause  

IF EXIST D:\RPS_BACKUP\backups_to_Zip\ goto zipexist else goto zipexistcontinue  
:zipexist  
IF EXIST d:\RPS_BACKUP\backups_old\ rd /s /q D:\RPS_BACKUP\backups_old  
echo backup did not complete last time, backup will restart from Zip-usb phase.  
pause  
call Zip  
goto tidyup  
:zipexistcontinue  

IF EXIST D:\RPS_BACKUP\backups_old\ goto oldexists else oldexistscontinue  
:oldexists  
IF EXIST d:\RPS_BACKUP\backup_temp\ rename D:\RPS_BACKUP\backups_temp backups_to_Zip  
rd /s /q D:\RPS_BACKUP\backups_old  
echo backup did not complete last time, backup will restart at the Zip to usb phase.  
pause  
call Zip  
goto tidyup  
:oldexistscontinue  

IF EXIST D:\RPS_BACKUP\backups_temp\ goto tempexists else goto tempexistscontinue  
:tempexists  
IF EXIST D:\RPS_BACKUP\backups_old\ goto backupfailed else goto tempexistscontinue  
:backupfailed  
@rd /s /q D:\RPS_BACKUP\backups_temp  
echo backup did not complete last time, backup will restart from start.  
pause  
:tempexistscontinue  

md D:\RPS_BACKUPS\backups_temp  
xcopy \\user1\c\* D:\RPS_BACKUP\backups_temp\user1\c /h /e /z /f /r /i /s /k  
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler  
xcopy C:\* D:\RPS_BACKUP\backups_temp\user2\c /h /e /f /r /i /s /k  
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler  
xcopy \\user3\c\* D:\RPS_BACKUP\backups_temp\user3\c /h /e /z /f /r /i /s /k  
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler  
call sub  
call Zip  
:tidyup  
rename D:\RPS_BACKUP\backups_to_Zip backups  
pause  
goto :eof  

:ErrorHandler  
echo xcopyerrorcode is ERRORLEVEL contact ryan  
pause  
7
Ryan The Leach

Verwenden Sie Klammern, um die einzelnen Zweige zu gruppieren:

IF EXIST D:\RPS_BACKUP\backups_to_Zip\ (goto zipexist) else goto zipexistcontinue

In Ihrem Fall wird der Parser niemals die else sehen, die zur if gehört, da goto alles bis zum Ende des Befehls glücklich akzeptiert. Ein ähnliches Problem wird angezeigt, wenn Sie echo anstelle von goto verwenden.

Durch die Verwendung von Klammern können Sie die Anweisungen auch direkt verwenden, ohne herumspringen zu müssen (obwohl ich Ihren Code nicht für die Verwendung strukturierter Programmiertechniken neu schreiben konnte. Vielleicht ist es zu früh oder es eignet sich nicht gut, um Strukturen zu blockieren der code ist gerade jetzt).

16
Joey

Wenn Sie Probleme mit dem Teil else ausschließen möchten, entfernen Sie die Variable else und platzieren Sie den Befehl in einer neuen Zeile. So was:

IF EXIST D:\RPS_BACKUP\backups_temp\ goto tempexists
goto tempexistscontinue  
5
Prutswonder

Aus der Hilfe (if /?):

.__ Die ELSE-Klausel muss in derselben Zeile wie der Befehl nach der IF stehen. Zum Beispiel:

 IF EXIST Dateiname (
 del Dateiname .
) ELSE (
 Echo-Dateiname. fehlt .
) 

 Das Folgende würde NICHT funktionieren, da der Befehl del durch eine Newline beendet werden muss : 

 IF EXIST Dateiname del Dateiname ELSE Echo Dateiname. missing 

 Folgendes würde auch nicht funktionieren, da sich der ELSE-Befehl in derselben Zeile befinden muss 
 am Ende des IF-Befehls: 

 IF EXIST Dateiname del Dateiname .
 ELSE Echo Dateiname. fehlt 
4
Gabe

Gibt es eine ELSE in der DOS-Stapelverarbeitungssprache? Damals, als ich noch so etwas tat, gab es das nicht.

Wenn meine Theorie richtig ist und Ihre ELSE ignoriert wird, ist es besser für Sie

IF NOT EXIST file GOTO label

... und Sie sparen damit eine Codezeile (die direkt nach Ihrer IF).

Zweitens erinnere ich mich vage an einen Fehler beim Testen auf Verzeichnisse. Das Leben wäre einfacher, wenn Sie prüfen könnten, ob eine Datei in diesem Verzeichnis vorhanden ist. Wenn es keine Datei gibt, von der Sie sich sicher sein können, sollten Sie etwas versuchen (dies war früher bei Win95, IIRC der Fall), indem Sie den Gerätenamen NUL an Ihren Verzeichnisnamen anhängen, z.

IF NOT EXIST C:\dir\NUL GOTO ...
2
Carl Smotricz
@echo off

:START
rmdir temporary
cls
IF EXIST "temporary\." (echo The temporary directory exists) else echo The temporary directory doesn't exist
echo.
dir temporary /A:D
pause

echo.
echo.
echo Note the directory is not found
echo.
echo Press any key to make a temporary directory, cls, and test again
pause

Mkdir temporary
cls
IF EXIST "temporary\." (echo The temporary directory exists) else echo The temporary directory doesn't exist
echo.
dir temporary /A:D
pause
echo.
echo press any key to goto START and remove temporary directory 
pause 

goto START
1
Edoctoor

Um nach DIRECTORIES zu suchen, sollten Sie Folgendes nicht verwenden:

if exist c:\windows\

Um richtig zu arbeiten, verwenden Sie:

if exist c:\windows\\.

beachten Sie das "." Am Ende.

0
Mike Emery