Ich versuche, ein Batch-Backup-Skript auf Win7 einzurichten. Es funktioniert meistens, aber ich habe eine Codezeile, die mehrmals ausgeführt wird. Ich habe etwas herumgesucht und ich denke, dass es damit zu tun hat, wie Batch-Dateien Code in "()" verarbeiten, aber ich bin mir nicht sicher, der beste Weg, um es zu beheben.Windows Stapelscript- for/D Delims Ausführen mehrmals
Jede Hilfe wäre toll!
Script:
for /D %%d in (C:\toBackupDir\*.*) do (
for %%f in (C:\zipDir\*) do (
for /f "tokens=1 delims=_" %%i in ("%%~nf") do (
if "%%i"=="%%~nd" (
if "%%~tf"=="%%~td" (
echo "%%~nf" is "%%~nd" No Backup necessary.
) else (
7z.exe a -tzip -stl -mx=1 "C:\zipDir\%%~nd_%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%.zip" "%%d"
)
)
)
)
)
Die Zeile "7z.exe" wird oft, wenn "%% i" == "%% ~ nd" ausgeführt ist wahr. Mein Gedanke ist, dass die letzte for-Schleife zum Teilen des Dateinamens viele Male ausgeführt wird, aber sobald sie% i bekommt und die Vergleiche macht, bin ich damit fertig. Kann ich nach Ausführung der Zeile "7z.exe" aus der Schleife ausbrechen? Ich habe gelesen, dass das Ausbrechen in einer Batch-Datei schwierig ist.
Lassen Sie mich wissen, wenn Sie eine Aufschlüsselung des Codes benötigen.
Vielen Dank im Voraus!
Sind Sie sicher, dass der 'if "%% ~ tf" == "%% ~ td"(' - das heißt, die filetime zu der Zeit Backup-Verzeichnis zu vergleichen? Da Sie Dateien in 'c: \ zipdir' erstellen, ändert sich die Zeit jedes Mal, wenn eine' 7z' Instanz aufgerufen wird. Vielleicht ist es zu spät für mich - aber ich verliere den Überblick über das, was Sie versuchen zu tun Kommentare (erinnern Sie sich an "REM" Kommentare in Codeblöcken, nicht '' '' Kommentare) kann viel erklären - und würde wahrscheinlich mit der zukünftigen Wartung helfen. – Magoo
Wir brauchen nicht wirklich eine Aufschlüsselung des Codes, was wir brauchen, ist eine Übersicht der Aufgabe, die Sie zu erfüllen versuchen und was in Bezug auf diese Erwartungen geschieht. – Compo
Vielen Dank für Ihre Antwort. Ich weiß, dass ich das normalerweise nicht vergleichen kann. Ich habe nur den Teil des Skripts gepostet, mit dem ich Probleme hatte. Ich führe FolderTimeUpdate b4 aus, das diesen Teil des Skripts auf temporären Dateien ausführt. FolderTimeUpdate überprüft alle Dateien in jedem Verzeichnis und aktualisiert den Zeitstempel des übergeordneten Ordners auf den Wert der ältesten Datei in einem untergeordneten Verzeichnis.7-Zip legt auch seinen Zeitstempel auf den ältesten Ordner mit der Option -stl fest. Dies funktioniert, solange es keine leeren Ordner gibt und wenn ich Zips manuell lösche. Das Skript braucht noch Arbeit ... aber hier bin ich momentan festgefahren. –