cbli
Goto Top

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

Content-Key: 45630

Url: https://administrator.de/contentid/45630

Printed on: April 26, 2024 at 21:04 o'clock

Member: Biber
Biber Nov 29, 2006 at 12:26:38 (UTC)
Goto Top
Moin cbli,

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
Member: cbli
cbli Nov 29, 2006 at 13:17:56 (UTC)
Goto Top
Moin cbli,

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.

Nachdem ich noch ein ) am Ende eingefügt hatte, gings wunderbar.
Funktioniert jetzt mit allen Dateien egal ob mit oder ohne Leerzeichen im Dateinamen.
Habs auch gleich mit Sonderzeichen getestet und geht auch.
Trotzdem sind noch 2 Fragen (glaube du würdest dich auch wundern wenn ich nicht nachhaken würde face-smile ) enstanden:

1. Wie sieht die kürzere Version aus ?

2. Wie sähe der Code aus wenn keine Übereinstimmungen da sind (also nix gelöscht werden kann) und ich auf das hin überprüfen will
Ist nicht so wichtig,nur der Schönheit wegen und vielleicht für ein späteres Projekt.

Habs mal so versucht ging aber nicht

for /f "tokens=3" %%k in ('7za l -slt "D:\temp\lager\*.zip" ^| findstr /C:"Path = "') do if not exist "C:\programme\verarbeitet\%%k" goto schongelöscht

Danke dir

Gruß
Claus

PS: Wie lange befasst du dich schon so intensiv mit Batch Dateien ?
Member: Biber
Biber Nov 29, 2006 at 17:22:13 (UTC)
Goto Top
Moin cbli,

ad 1.
Die kürzere Version -not recommended wäre schlicht und einfach der Verzicht auf jegliche Fallunterscheidung face-big-smile
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"  
...
..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
del "test.txt "  
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.
...
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
Member: cbli
cbli Dec 01, 2006 at 12:01:23 (UTC)
Goto Top
Dieser Thread kann geschlossen werden.

Danke nochmals für deine Hilfe.


Gruß
Claus