Automatisches Löschen von Dateien nach Abgleich mit Inhalt von Zip Dateien
Ersteinmal sorry ,daß ich hierfür einen neuen Thread aufmache,aber der alte ist geschlossen.
Es geht um
Automatisches Verschieben von Dateiinhalten nach Abfrage
Im speziellen um diese Zeile
for /f "tokens=3" %%k in ('7za l -slt "D:\temp\lager\*.zip" ^| findstr /C:"Path = "') do if exist "C:\Programme\verarbeitet\%%k" del /q "C:\Programme\verarbeitet\%%k"
Hier wird nach dem Abgleich der Inhalte der Zip Dateien in D:\temp\lager\*.zip mit Dateien im
Verzeichnis C:\Programme\verarbeitet alle Übereinstimmungen in C:\Programme\verarbeitet gelöscht.
Hat auch wunderbar funktioniert,nur habe ich vorhin die Batch , nachdem der Thread geschlossen wurde, mit neuen Zip Dateien ausgeführt.
Bei diesen Zips waren nun Dateien dabei ,die ein Leerzeichen im Namen haben (hatte dies leider vergessen zu testen).
Diese werden nun leider nicht gelöscht. Wie ändere ich obige Zeile damit auch wirklich komplett alles gelöscht wird.
Dieser Thread könnte dann später entweder gelöscht oder wenn möglich in den Ursprungsthread verschoben werden.
Danke nochmals und sorry
Gruß
Claus
Es geht um
Automatisches Verschieben von Dateiinhalten nach Abfrage
Im speziellen um diese Zeile
for /f "tokens=3" %%k in ('7za l -slt "D:\temp\lager\*.zip" ^| findstr /C:"Path = "') do if exist "C:\Programme\verarbeitet\%%k" del /q "C:\Programme\verarbeitet\%%k"
Hier wird nach dem Abgleich der Inhalte der Zip Dateien in D:\temp\lager\*.zip mit Dateien im
Verzeichnis C:\Programme\verarbeitet alle Übereinstimmungen in C:\Programme\verarbeitet gelöscht.
Hat auch wunderbar funktioniert,nur habe ich vorhin die Batch , nachdem der Thread geschlossen wurde, mit neuen Zip Dateien ausgeführt.
Bei diesen Zips waren nun Dateien dabei ,die ein Leerzeichen im Namen haben (hatte dies leider vergessen zu testen).
Diese werden nun leider nicht gelöscht. Wie ändere ich obige Zeile damit auch wirklich komplett alles gelöscht wird.
Dieser Thread könnte dann später entweder gelöscht oder wenn möglich in den Ursprungsthread verschoben werden.
Danke nochmals und sorry
Gruß
Claus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 45630
Url: https://administrator.de/contentid/45630
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
4 Kommentare
Neuester Kommentar
Moin cbli,
Für diesen Fall so erweitern:
[Die neue Zählvariable ist ein kleines "L", d.h. die auf ""K" folgende.]
Ginge auch kürzer, aber so ist es lesbarer.
Grüße
Biber
Für diesen Fall so erweitern:
...
for /f "tokens=3*" %%k in ('7za l -slt "D:\temp\lager\*.zip" ^| findstr /C:"Path = "') do (
if [%%l]== (
if exist "C:\Programme\verarbeitet\%%k" del /q "C:\Programme\verarbeitet\%%k"
) ELSE (
if exist "C:\Programme\verarbeitet\%%k %%l" del /q "C:\Programme\verarbeitet\%%k %%l"
)
[Die neue Zählvariable ist ein kleines "L", d.h. die auf ""K" folgende.]
Ginge auch kürzer, aber so ist es lesbarer.
Grüße
Biber
Moin cbli,
ad 1.
Die kürzere Version -not recommended wäre schlicht und einfach der Verzicht auf jegliche Fallunterscheidung
Das würde zwar beim Auflösen der %%k und %%l-Variablen zu..
..führen, also an EXIST und DEL jeweils bei Dateinamen ohne Leerzeichen im Namen
eine in Anführungszeichen eingeschlossene Zeichenkette mit einem SPACE am Ende übergeben.
Beide Befehle kommen damit klar...es wird alles gemacht wie erhofft.
Aber es ist halt kein gesichertes Feature des sympathischen Weltmarktführers, auf das ich vertrauen würde.
Eigentlich trau ich dem eh' nich' *murmel
Ob ein Befehl
immer funktioniert...? Und ob in VBScript auch ein oFS.Delete("test.txt ") genauso klappt....?
Da riskier ich nichts und nehme lieber eine Zeile Batch mehr in Kauf.
ad 2.
Hm..keine Übereinstimmungen...okay. Aber daraus abzuleiten, dass die Datei schon gelöscht ist...mutig.
Ich würde in diesem ELSE-Fall nicht mit GOTO irgendwohin springen, sondern diesen Dateinamen in eine Logdatei schreiben.
Und diese Logdatei ggf. danach anzeigen, abarbeiten, whatever.
ad P.S. Habe damit angefangen, nachdem ich mich im Forum registriert habe.
Grüße
Biber
ad 1.
Die kürzere Version -not recommended wäre schlicht und einfach der Verzicht auf jegliche Fallunterscheidung
for /f "tokens=3*" %%k in ('7za l -slt "D:\temp\lager\*.zip" ^| findstr /C:"Path = "') do (
if exist "C:\Programme\verarbeitet\%%k %l" del /q "C:\Programme\verarbeitet\%%k %l"
)
Das würde zwar beim Auflösen der %%k und %%l-Variablen zu..
...if exist "C:\Programme\verarbeitet\irgendeineDatei.xyz " del /y "C:\Programme\verarbeitet\irgendeineDatei.xyz "
...if exist "C:\Programme\verarbeitet\irgendeine andere Datei.xyz" del /y "C:\Programme\verarbeitet\irgendeine andere Datei.xyz"
...
eine in Anführungszeichen eingeschlossene Zeichenkette mit einem SPACE am Ende übergeben.
Beide Befehle kommen damit klar...es wird alles gemacht wie erhofft.
Aber es ist halt kein gesichertes Feature des sympathischen Weltmarktführers, auf das ich vertrauen würde.
Eigentlich trau ich dem eh' nich' *murmel
Ob ein Befehl
del "test.txt "
Da riskier ich nichts und nehme lieber eine Zeile Batch mehr in Kauf.
ad 2.
Hm..keine Übereinstimmungen...okay. Aber daraus abzuleiten, dass die Datei schon gelöscht ist...mutig.
Ich würde in diesem ELSE-Fall nicht mit GOTO irgendwohin springen, sondern diesen Dateinamen in eine Logdatei schreiben.
Und diese Logdatei ggf. danach anzeigen, abarbeiten, whatever.
...
for /f "tokens=3*" %%k in ('7za l -slt "D:\temp\lager\*.zip" ^| findstr /C:"Path = "') do (
if exist "C:\Programme\verarbeitet\%%k %l" (
del /q "C:\Programme\verarbeitet\%%k %l"
) ELSE (
Echo %date% "C:\Programme\verarbeitet\%%k %l" existiert nicht. Evtl. gelöscht?>>irgendein.log
))
...
ad P.S. Habe damit angefangen, nachdem ich mich im Forum registriert habe.
Grüße
Biber