2016-07-01 6 views
0

Ich schreibe gerade eine einfache Batch-Datei. Ich bin nicht neu in der Programmierung, aber keineswegs ein Experte. Dies ist das erste Mal, dass ich Batch-Dateien verwendet habe.Batch-Datei Geschachtelte IF-Anweisungshilfe - CMD Batch

Grundsätzlich möchte ich, dass eine Datei aus einem Verzeichnis in ein anderes verschoben wird, und wenn es im Zielverzeichnis bereits eine Datei mit demselben Namen gibt, wird sie als Backup umbenannt. Auf diese Weise wird immer ein Backup erstellt, falls dieses Skript versehentlich ausgeführt wird.

Nach Stunden der Fehlersuche in meinem Code, ich weiß immer noch nicht, warum es nicht funktioniert. Ich vermute, dass es etwas mit verschachtelten if-Anweisungen zu tun hat. Eine If-Anweisung in einer if-Anweisung (mangels einer besseren Erklärung).

Ich würde die Hilfe zu schätzen wissen. Danke

@echo off 

REM Variables 
rem dir1 is the source directory 
set dir1=C:\Users\%username%\Desktop\Dir1\ 
rem dir2 is the target directory 
set dir2=C:\Users\%username%\Desktop\Dir2\ 
rem file is the name of the source file and desired name of the target file 
set file=file.txt 
rem pre1 is the name of the copy of the old target file before it is overwritten 
set pre1=push backup 
rem pre2 is the name of prefix for a temporary file created in the target directory 
set pre2=temp 

REM if source file exist 
if exist %dir1%%file% (
    rem if there is a file named the same in target directory 
    if exist %dir2%%file% (
     rem if there is allready a backup file 
     if exist %dir2%%pre1%%file% (
      rem rename the backup file as a temp file 
      rename %dir2%%pre1%%file% %dir2%%pre2%%file% 
      rem rename the old file as backup file 
      rename %dir2%%file% %dir2%%pre1%%file% 

      rem move source file to target directory 
      move %dir1%%file% %dir2% 

      rem if rename failed 
      if not exist %dir2%%file% (
       rem rename the backup to the normal file 
       rename %dir2%%pre1%%file% %file% 
       rem rename the temp file to the backup file 
       rename %dir2%%pre2%%file% %pre1%%file% 
       rem echo error 
       echo rename error 
       pause 
      rem Delete temp file 
      ) else (del %dir2%%pre2%%file%) 
     ) 
    ) ELSE (move %dir1%%file% %dir2%) 
) ELSE (echo %file% does not exist in directory "%dir1%") 
pause 

Entschuldigung für meine schlampig kommentieren.

+0

Bitte zeigen Sie Fehler, die Sie auf der Konsole immer – SomeDude

+0

Ich bin nicht immer ein Fehler, Wenn eine Datei.txt in Verzeichnis1 und Verzeichnis2 vorhanden ist, wird die Datei nicht verschoben. Wahrscheinlich, weil die Datei bereits existiert, weshalb ich sie umbenennen musste, die Datei.txt in dir2 in "push backup.file.txt", also denke ich, dass ich die else oder Einzüge falsch habe, ich weiß nicht wo. Danke für die Hilfe –

+0

Sie sehen @echo am Anfang Ihrer Batchdatei. Kommentiere es mit REM und wiederhole es, um den Fehler auf der Konsole zu sehen. – SomeDude

Antwort

-2

Sie vermissen eine andere für die erste IF und eine richtige paean für die wahre auf der ersten IF.

Sollte '' else() 'haben, um die Syntax zu vervollständigen.

Aus irgendeinem Grund zeigen sie jetzt.

Fügen Sie eine else() für die, die Sie nicht haben.

+0

Warum? 'else()' ist redundant. – melpomene

+0

Eine fehlt für eine der if-Anweisungen. Ich denke, .bat mag alle Syntax vorhanden zu sein. – xCoder2015

+0

Ich sehe kein Problem mit dem Einzug der ersten if-Anweisung. Es gibt eine Registerkarte vor dem Code unter "Wenn vorhanden% dir1 %% Datei% (". Ich denke nicht, dass sonst() wird alles ändern und es scheint keine Wirkung zu haben. –

1

Umschließen Sie alle Ihre Dateireferenzen in Anführungszeichen. Leerzeichen in Benutzernamen oder Dateinamen werden sonst die meisten Batch-Skripte beschädigen.

z. Ihre pre1 Variable ist gleich push backup, die ein Leerzeichen enthält.

So Ihre 3. exist Test:

if exist %dir2%%pre1%%file% (...) 

Wird übersetzen (die anderen Variablen zu bewerten und Benutzernamen unter der Annahme, Buchse):

if exist C:\Users\jack\Desktop\Dir2\push backupfile.txt (...) 

Dies wird nach einer Datei namens:

drücken

in Ordner:

C: \ Benutzer \ jack \ Desktop \ Dir2 \

Und wenn die Datei existiert, dann wird der Befehl, der ausgeführt werden sollte, ist:

backupdatei.txt (...

)

von Dateireferenzen in doppelte Anführungszeichen Verpackung:

if exist "%dir2%%pre1%%file%" (...) 

Sie die gewünschte Kontrolle erhalten:

if exist "C:\Users\jack\Desktop\Dir2\push backupfile.txt" (...)