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.
Bitte zeigen Sie Fehler, die Sie auf der Konsole immer – SomeDude
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 –
Sie sehen @echo am Anfang Ihrer Batchdatei. Kommentiere es mit REM und wiederhole es, um den Fehler auf der Konsole zu sehen. – SomeDude