cbli
Goto Top

Automatisches Verschieben von Dateiinhalten nach Abfrage

Bekomme mein Problem leider nicht in den Griff und habe nun versucht einen neuen Lösungsweg zu finden.

Ich möchte bestimmte Zip Dateien in einem Verzeichnis die Dateien mit bestimmten Dateiendungen beinhalten automatisch in ein Verzeichnis verschieben lassen aus dem sie dann in andere Verzeichnisse geordnet nach Dateiendung der entpackten Datei sortiert werden.
Andere Zip Dateien in diesem Verzeichnis sollen nicht davon betroffen sein.
Das entpacken der Zip Dateien in die gewünschten Verzeichnisse funktioniert einwandfrei.
Jedoch muss mich momentan noch alle von Hand verschieben ,dies möchte ich nun automatisieren.
Ich schaffe es auch,daß er die Zips verschiebt,aber eben alle und nicht nur die von mir gewünschten.
Außerdem werden Zips die Leerzeichen im Dateinamen haben, ignoriert und nichtmal verschoben.
Wo ist mein Fehler ?
Bin verzweifelt und weiss keinen Rat mehr.
Bitte helft mir !

Hier mein Ansatz:

for %%z in ("c:\temp\*.zip") do @(  
       For %%i in (xls doc jpg bmp gif) do move /y "%%z" *.%%i  d:\dateien\verarbeitet\  
)

Vielen Dank
Gruß
Claus

Content-Key: 44101

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: bastla
bastla Nov 09, 2006 at 17:02:37 (UTC)
Goto Top
Hallo Claus!

Probier's mal so:
for %%i in ("C:\Temp\*.zip") do findstr ".xls .doc .jpg .bmp .gif" "%%i" >nul && move /y "%%i" d:\dateien\verarbeitet  

Grüße
bastla
Member: Biber
Biber Nov 09, 2006 at 18:07:52 (UTC)
Goto Top
Nur als Fussnote:
Noch je ein "@" vor "FindStr" und "Move", dann irritiert das Geschreibsel auf dem Bildschirm nicht so...

@cbli
Bitte nicht für dasselbe Problem, wie lebensbedrohlich es auch erscheinen mag, mehrere Beiträge aufmachen.
Und schon gar nicht im Bereich Batch & Shell.... da wird schon darauf geachtet, dass Fragen beantwortet und Lösungen erarbeitet werden.

Und bitte, noch mal positiv ausgedrückt:
Wo ist mein Fehler ?
Bin verzweifelt und weiss keinen Rat mehr.
Bitte helft mir !

Hier gibt es Tipps, manchmal fertige Lösungen, manchmal Anregungen, oft auch nur Verweise auf professionelle Kauf-Lösungen...
...aber keine Taschentücher !

Back To Thread.

1. In Deinem heutigen MOVE und gestrigen DEL-Befehl sind die Anführungszeichen verheerend falsch gesetzt.
FÜR DIE TONNE: ....... move /y "%%z" *.%%i
Etwas besser: ....move /y "%%~z.%%i"

2. Etwas besser -----> wäre es aber nur, wenn in %%z Dateinamen (ohne Extensions) wären und in %%i Datei-Endungen wie .xls, .doc, .... stünden.
Weder das eine noch das andere ist der Fall.

3. Anders ausgedrückt, diese Anweisung ist hier untauglich (unzuständig, würde bastla schreiben).
Geht nicht. Lässt sich auch nicht verbessern.

Nimm die Zeile, kopiere die in eine Textdatei, brenn die auf CD, klebe eine Briefmarke drauf und schick es an die Heilsarmee.
Für die Weihnachtstombola.
Du kannst diese Zeile nicht sinnvoll gebrauchen für Dein Vorhaben.

Andere Strategien hat bastla gestern und heute aufgezeigt.
Und noch einen Tag vorher hatten wir eine sauberere Lösung angefangen mit
"erst mal die Inhalte der Zip's lesen und je nachdem was drin ist, weiterwackeln".
Was ist denn aus dem Ansatz geworden??

Bitte sag durch, welche der Threads Du weiterführen willst und welche ich schließen kann.

Und den einen verbleibenden führen wir zu Ende bzw. zu einer Lösung.

Grüße
Biber
Member: cbli
cbli Nov 09, 2006 at 18:11:30 (UTC)
Goto Top
Leider werden auf diese Art zwar alle gewünschten Zips verschoben,aber auch welche die keine Dateien meiner gewünschten Dateiendungen hatten.
Komischerweise verblieben bei meinem Test genau 2 Zips in c:\temp, warum diese nicht auch verschoben wurden ist mir ein Rätsel ,da auch sie keinerlei Merkmale meiner Wunschdateien hatten.
Wäre es möglich den Code nochmals zu überprüfen ?

Vielen Dank dafür

Gruß
Claus
Member: bastla
bastla Nov 09, 2006 at 19:39:48 (UTC)
Goto Top
Hallo Claus!

Nur zwischendurch eine kurze Frage: Wäre es uU eine Option, schon bei der Erstellung der .zip-Dateien vernünftige (auf den Inhalt hinweisende) Dateinamen zu wählen, wie etwa "BestOfXLS2006-1.zip"?
Na gut, also noch einmal mit "7za.exe" (gespeichert in "C:\Utils"):
@echo off & setlocal
set Inhalt="%Temp%\Inhalt.txt"  
for %%i in ("C:\Temp\*.zip") do C:\Utils\7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr ".xls .doc .jpg .bmp .gif" %Inhalt% >nul && move /y "%%i" d:\dateien\verarbeitet  

Grüße
bastla
Member: cbli
cbli Nov 10, 2006 at 11:42:07 (UTC)
Goto Top
Bitte sag durch, welche der Threads Du
weiterführen willst und welche ich
schließen kann.

Und den einen verbleibenden führen wir
zu Ende bzw. zu einer Lösung.

Grüße
Biber


Es können alle Threads von mir als abgeschlossen gesetzt werden.
Ich habe das Problem nicht lösen können und selektiere die Zips nun selber.
Das entpacken und verschieben hat ja funktioniert,nur eben das automatische Selektieren nicht.
Ich habe gemerkt,das mir zuviele Grundlagen fehlen und das das dann auch zuviel Zeit kostet.
Die werde ich erstmal nachholen.
Nochmals Danke für die Hilfe

Gruß
Claus

PS: Welches Buch für Batch Programmierung (Einsteiger) ist empfehlenswert ?
Member: Biber
Biber Nov 10, 2006 at 12:50:55 (UTC)
Goto Top
Moin cbli,

dann setze ich die beiden anderen Threads auf "Geschlossen" und diesen hier führen wir zu einer Lösung.

Bücher für Batch-Einsteiger: Kenn ich leider auch nicht.
Aber im Bereich "Batch & Shell" sind auch mehrere Links gepostet zu (empfehlenswerten) Batch-Tutorials.

Und auch hier im Forum sind ein paar kleine Tutorials.

Ich würde Dir auch NICHT zu einem Buch raten, da Du den seltenen Glücksfall einer konkreten und vergleichsweise exotischen, aber eben realen Anforderung vorliegen hast.
Und alle konstruierten Beispiele in irgendwelchen Büchern sind viel zu weit weg von diesem Problem - einfach nicht übertragbar.

Wenn bei geposteten Beispielen etwas nicht verständlich ist: Frag nach.
Einmal, zweimal...so oft wie nötig. Kein Problem.
Denn es ist schon den meisten, die hier Lösungsvorschläge posten, auch wichtig, dass der Lösungsweg verstanden wird und nicht nur abgetippt.
Und auch umgekehrt - die wenigsten Fragesteller wollen einfach nur "eine funktionierende Lösung", sondern eben das nächste Mal es selbst versuchen können.

Das Nachfragen aber bitte in einem Thread, wenn es um dasselbe Problem geht.

Grüße
Biber
Member: cbli
cbli Nov 13, 2006 at 12:51:42 (UTC)
Goto Top
Habe mein Problem nun in soweit gelöst,daß ich den Inhalt der Zipdateien nach dem durchsuchen und entpacken durch eine zweite for schleife

for %%z in ("d:\temp\*.zip") do @(  
       For %%i in (doc xls gif bmp) do 7za d -r -y "%%z" "*.%%i")  

gleich beim entpacken löschen lasse.
Leider verbleiben bei manchen Zipdateien noch Dateien im Zip die andere Dateiendungen haben (ganz selten).
Kann man diese irgendwie automatisch löschen ?
Ferner bleiben nach der 2ten For Schleife die entpacken und gelöschten zipdateien noch mit einer Größe von von ca 22 byte übrig, obwohl da sonst keine Dateien mehr drin sind.
Wie lösche ich diese automatisch per batch,also ne Abfrage auf zip datei und ne größe kleiner/gleich ca 22 byte ?

Wo ist hier der Fehler
for /R %%z in (d:\temp\*.zip) do if "%%z" LSS 25 del %%z else echo "Alles gelöscht"

Danke nochmals für die Hilfe

Gruß
Claus
Member: bastla
bastla Nov 15, 2006 at 22:53:34 (UTC)
Goto Top
Hallo Claus!

Wird's so besser?
for /R d:\temp %%z in (*.zip) do if "%%~zz" LSS 25 del "%%z" else echo "Alles gelöscht"  

Grüße
bastla
Member: Biber
Biber Nov 15, 2006 at 23:38:26 (UTC)
Goto Top
Moin cbli,

die unten von bastla korrigierte Zeile ist sicherlich die richtige Lösung für das Teilproblem "Löschen aller *.zip's kleiner als 25 Byte".

Dennoch ist mir (und möglicherweise auch den Mitlesern) nicht mehr richtig klar, welche Strategie Du nun verfolgst.

Als Nachfrage formuliert:
Habe ich es richtig verstanden, dass
- Du irgendwo einen Haufen *.zip-Dateien vorliegen hast.
- Aus denen willst Du ...?
a) alle *.xls-Dateien in ein Unterverzeichnis whatever\xls, alle *.doc-Dateien in ein Unterverzeichnis whatever\doc etc entpacken,
dann diese zip-Datei, nachdem alle namentlich benannten Dateien entpackt sind, löschen,
und alle *zip-Dateien, die keine *.doc, xls,....-Dateien enthalten so lassen wie sie sind?
-oder-
b) alle *.zip-Dateien, die *.doc, *xls,... enthalten als *.zip-Dateien verschieben in diese Verzeichnisse?
Und wenn ja, wohin wird eine Datei verschoben, die *.doc's UND *.xls UND... enthält?

-und-
wie gehst Du mit Kollisionen um... wenn eine Datei Readme.doc in mehreren *.zips enthalten ist?

Kannst Du noch mal bitte kurz den Plan und den Stand des Batches skizzieren?

Danke
Biber
Member: cbli
cbli Nov 16, 2006 at 10:08:29 (UTC)
Goto Top
Moin cbli,

die unten von bastla korrigierte Zeile ist
sicherlich die richtige Lösung für
das Teilproblem "Löschen aller
*.zip's kleiner als 25 Byte".

Dennoch ist mir (und möglicherweise
auch den Mitlesern) nicht mehr richtig klar,
welche Strategie Du nun verfolgst.

Als Nachfrage formuliert:
Habe ich es richtig verstanden, dass
- Du irgendwo einen Haufen *.zip-Dateien
vorliegen hast.
- Aus denen willst Du ...?
a) alle *.xls-Dateien in ein
Unterverzeichnis whatever\xls, alle
*.doc-Dateien in ein Unterverzeichnis
whatever\doc etc entpacken,
dann diese zip-Datei, nachdem alle
namentlich benannten Dateien entpackt sind,
löschen,
und alle *zip-Dateien, die keine *.doc,
xls,....-Dateien enthalten so lassen wie sie
sind?
-oder-
b) alle *.zip-Dateien, die *.doc, *xls,...
enthalten als *.zip-Dateien verschieben in
diese Verzeichnisse?
Und wenn ja, wohin wird eine Datei
verschoben, die *.doc's UND *.xls UND...
enthält?

-und-
wie gehst Du mit Kollisionen um... wenn eine
Datei Readme.doc in mehreren *.zips enthalten
ist?

Kannst Du noch mal bitte kurz den Plan und
den Stand des Batches skizzieren?

Danke
Biber


Erstmal Danke für das erneute Befassen mit meinem Problem.
Folgende Situation:

Ich bekomme Zip Dateien auf deren Namen ich keinen Einfluss habe.
Ein automatisches Umbennen aufgrund des Inhalts der Zip Dateien könnte eine Möglichkeit sein,wenn danach der restliche Vorgang leichter per Batch zu lösen wäre.
Das Problem ist eben,daß neben den Zip Dateien die ich bekomme ,sich in dem Verzeichnis auch noch andere Zip Dateien befinden können.
Wie gesagt, bestünde die Möglichkeit alles manuell zu selektieren,aber gerade das möchte ich ja nicht unbedingt,da ich eine automatische Lösung auch noch auf andere Dinge anwenden könnte.
Es sollte also eine Batch laufen die ein bestimmtes Verzeichnis in dem sich wie gesagt auch noch andere Zip Dateien befinden können (die nicht verarbeitet werden sollen), automatisch auf vorhandensein von zip dateien mit bestimmten Inhalt prüft.
Es geht dabei um die Dateiendungen.
Wenn bestimmte Dateieendungen gefunden werden soll die GANZE Zip Datei (es können sich auch noch andere Dateien in der Zip Datei befinden auf die nicht abgefragt wird und die auch nicht wichtig sind )automatisch entpackt (bestimmtes Verzeichnis - muss nicht nach der Dateiendung benannt werden) werden. Die weitere Verabeitung und das Löschen habe ich bereits in einem Testlauf hinbekommen (simples move und dann delete rest der nicht gebraucht wird).
Ein automatisches Verschieben der ganzen Zipdatei nach positiver Abfrage auf den Inhalt wäre auch eine Lösung, da ja die entpack Batch die ich hier erhalten habe, perfekt funktioniert.
Was mögliche Kollisionen angeht, besteht das Problem nicht,da die Dateiendungen um die es geht,nur in den Zip Dateien vorkommen die ich erhalte und sich zu 99% nicht in zip dateien befinden die sich sonst so in dem Verzeichnis befinden.
xls, doc ,gif,bmp waren nur Beispiele.
Sollte die Lösung mit dem automatischen Verschieben der ganzen Zip Datei nicht möglich sein, müsste sichergestellt sein,daß nach dem entpacken der Dateien mit den gewünschten Dateiendungen ,nur diese "betroffenen" Zip Dateien automatisch gelöscht würden.
Bisher kann ich zwar alle Dateien mit den gewünschten Endungen entpacken und mit einer 2ten For Schleife diese auch aus den Zips entfernen,allerdings verbleiben dann ja noch manchmal andere unwichtige Dateien in den Zips oder selbst wenn die Zip Datei leer ist wird sie noch mit einer Restgröße von ca 22 Byte angezeigt. Wieso das so ist, keine Ahnung.
Nochmals Dank für eure Hilfe

Gruß
Claus
Member: bastla
bastla Nov 16, 2006 at 10:51:13 (UTC)
Goto Top
Hallo Claus!

Könnte folgender Ablauf passen:

1. Die .zip-Dateien mit passenden Inhalten in einen temporären Ordner verschieben (wie Automatisches Verschieben von Dateiinhalten nach Abfrage)

2. Aus den verschobenen .zip-Dateien die Dateien aller relevanten Dateitypen in die gewünschten Zielordner entpacken (funktionierte ja bisher auch schon)

3. Alle .zip-Dateien im temporären Ordner rückstandsfrei löschen (also nicht "auslutschen" und die "Verpackung" herumliegen lassen).

Die angesprochenen Kollisionen beziehen sich auf die Zielordner - was soll geschehen, wenn eine Datei "Readme.doc" in mehreren .zip-Dateien enthalten ist und daher beim Entpacken die bereits im Zielordner befindliche "Readme.doc" überschrieben würde?

Grüße
bastla
Member: cbli
cbli Nov 16, 2006 at 11:06:26 (UTC)
Goto Top
Hallo Claus!

Wird's so besser?
for /R d:\temp %%z in (*.zip) do
> if "%%~zz" LSS 25 del  
> "%%z" else echo "Alles  
> gelöscht"  
> 

Grüße
bastla

Leider nein bei meinen Versuchen löscht er alle Zip Dateien unabhängig von der Größe
Member: bastla
bastla Nov 16, 2006 at 11:11:35 (UTC)
Goto Top
Hallo Claus!

Jetzt aber:
for /R d:\temp %%z in (*.zip) do if %%~zz LSS 25 del "%%z" else echo "Alles gelöscht"  

Trotzdem halte ich von dieser Vorgangsweise weniger, sondern würde es eher so wie Automatisches Verschieben von Dateiinhalten nach Abfrage beschrieben versuchen.

Grüße
bastla
Member: cbli
cbli Nov 16, 2006, updated at Mar 29, 2023 at 21:22:44 (UTC)
Goto Top
Hallo Claus!

Könnte folgender Ablauf passen:

1. Die .zip-Dateien mit passenden Inhalten
in einen temporären Ordner verschieben
(wie oben)


Ich idiot hatte beim ersten Testlauf /c:"Path = " verändert und habs nicht gemerkt. Habe vorhin diese Idee nochmal aufgegriffen und diesmal hats funktioniert.
Er verschiebt jetzt nach Abfrage alle richtigen Zip Dateien. Jaaaaaaaaaaaaa !!!


2. Aus den verschobenen .zip-Dateien die
Dateien aller relevanten Dateitypen in die
gewünschten Zielordner entpacken
(funktionierte ja bisher auch schon)

Hier gibt es jetzt noch ein kleines Problem. Bei meinen Tests hatte alles funktioniert,doch jetzt im "Ernstfall" habe ich festgestellt ,daß Leerzeichen im Zielverzeichnispfad sind. d.h er findet beim entpacken die Verzeichnisse mit Leerzeichen nicht wohin die Dateien kommen sollen.
Ich könnte natürlich alles so lassen und noch einen move befehl einfügen,würde ja funktionieren (oder hat move auch probleme mit leerzeichen mit Verzeichnisnamen ?),aber mich würde interessieren ob es auch irgendwie direkt beim entpacken funktioniert ?
Fällt dir dazu auch eine Lösung ein ?



3. Alle .zip-Dateien im temporären
Ordner rückstandsfrei löschen (also
nicht "auslutschen" und die
"Verpackung" herumliegen lassen).

Die angesprochenen Kollisionen beziehen sich
auf die Zielordner - was soll geschehen, wenn
eine Datei "Readme.doc" in mehreren
.zip-Dateien enthalten ist und daher beim
Entpacken die bereits im Zielordner
befindliche "Readme.doc"
überschrieben würde?

Oh jetzt weiss ich erst was du meinst. Aber die entpackten Dateien haben so unterschiedliche Namen,daß es praktisch nicht vorkommt und darüberhinaus wird im Zielverzeichnis regelmäßig eine Löschaktion nicht mehr benötigter Dateien durchgeführt.
Außérdem haben viele Dateien das Tagesdatum + Uhrzeit (mit sekunden) im Dateinamen (quasi ein exaktes Erstellungsdatum).
Sollte es doch aber vorkommen, könnten die älteren Dateien ohne Nachfrage überschrieben werden.

Nochmals vielen Dank für deine Hilfe,wir sind bis auf obiges Problem am Ziel angelangt

Gruß
Claus
Member: cbli
cbli Nov 16, 2006 at 12:15:19 (UTC)
Goto Top
Hallo Claus!

Jetzt aber:
for /R d:\temp %%z in (*.zip) do
> if %%~zz LSS 25 del "%%z" else echo  
> "Alles gelöscht"  
> 
> Grüße
bastla

Funktioniert jetzt auch ganz wunderbar, auch dafür vielen Dank !

Gruß
Claus
Member: bastla
bastla Nov 16, 2006 at 12:17:26 (UTC)
Goto Top
Hallo Claus!

Leerzeichen im Zielverzeichnispfad
7za e *.zip -o"D:\Docs mit Leerstellen" -y *.doc -r  
... wieder einmal die fehlenden Anführungszeichen ...

Grüße
bastla
Member: Biber
Biber Nov 16, 2006 at 13:31:34 (UTC)
Goto Top
Moin cbli,
Funktioniert jetzt auch ganz wunderbar, auch dafür vielen Dank !

Öhm.... heißt das jetzt, dass der Beitrag auf "Gelöst" oder gar "Geschlossen" gesetzt werden kann?

Grüße
Biber
Member: cbli
cbli Nov 16, 2006 at 15:22:11 (UTC)
Goto Top
Moin cbli,
> Funktioniert jetzt auch ganz wunderbar,
auch dafür vielen Dank !

Öhm.... heißt das jetzt, dass der
Beitrag auf "Gelöst" oder gar
"Geschlossen" gesetzt werden kann?

Grüße
Biber

Ja,alle Beiträge von mir können als gelöst und geschlossen gesetzt werden.
Dank eurer Hilfe hab ichs jetzt mehr als perfekt hinbekommen.
Es funktioniert alles so wie es sollte.
Danke nochmals

Gruß
Claus
Member: Biber
Biber Nov 17, 2006 at 18:43:49 (UTC)
Goto Top
Thread nach kurzem Exkurs in Prüfen per Batch ob ein Verzeichnis leer ist wieder eröffnet.

Biber
Member: cbli
cbli Nov 27, 2006 at 15:14:17 (UTC)
Goto Top
Hallo Claus!

Nur zwischendurch eine kurze Frage:
Wäre es uU eine Option, schon bei der
Erstellung der .zip-Dateien vernünftige
(auf den Inhalt hinweisende) Dateinamen zu
wählen, wie etwa
"BestOfXLS2006-1.zip"?
Na gut, also noch einmal mit
"[http://www.7-zip.org/download.html
7za.exe]" (gespeichert in
"C:\Utils"):
@echo off & setlocal
> set Inhalt="%Temp%\Inhalt.txt"  
> for %%i in ("C:\Temp\*.zip") do  
> C:\Utils\7za l -slt "%%i" | findstr  
> /c:"Path = " > %Inhalt% &  
> findstr ".xls .doc .jpg .bmp .gif"  
> %Inhalt% >nul && move /y
> "%%i" d:\dateien\verarbeitet  
> 

Grüße
bastla

Hallo

Jetzt ist doch noch eine Frage entstanden.
Folgende Schleife funktioniert ja prächtig.

for %%i in ("d:\temp\*.zip") do 7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr ".xls" %Inhalt% >nul && move /y "%%i" d:\temp\verarbeitet  

ich hätte noch gerne eine kleine Schönheitskorrektur und zwar wenn ich die Batch mit obiger Schleife ausführe und sich keine Zip Dateien mit dem gewünschten Inhalt mehr im d:\temp Verzeichnis befinden,bekomme ich eine Fehlermeldung.
Ich könnte diese zwar unterdrücken, würde es aber bevorzugen wenn eine Abfrage stattfinden würde und ich dann z.B eine entsprechende Meldung bekomme würde,z.b dass keine zu verarbeitenden Dateien mehr vorhanden sind.

Gruß
Claus
Member: Biber
Biber Nov 27, 2006 at 17:40:43 (UTC)
Goto Top
Moin cbli,

Wenn Deine Verarbeitung (wenn ich es richtig verstehe) JETZT so aussieht:

@echo off & setlocal
Set "inhalt=%temp%\inhalt.tmp"  
For %%x in (.xls .doc .chm .txt ) do (
    for %%i in ("d:\temp\*.zip") do (   
         7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr "%%x" %Inhalt% >nul && move /y "%%i" d:\temp\verarbeitet  
    )
)
Dann sollte sie so erweitert werden:
@echo off <b> & setlocal enableDelayedExpansion</b>
Set "inhalt=%temp%\inhalt.tmp"  
For %%x in (.xls .doc .chm .txt ) do (
    for %%i in ("d:\temp\*.zip") do (   
         7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr "%%x" %Inhalt% >nul<b>& If !errorlevel! == 0 (  
               move /y "%%i" d:\temp\verarbeitet  
               ) ELSE (
               echo Keine Dateien mit Extension [%%x] in Datei %%i vorhanden.
             ) </b>
    )
)

Gruß
Biber
[Wie immer ungetestete Skizze... handle with Care]
P.S. Ja, ja, geTuemII, ich weiß.... es ginge auch als Oneliner..aber so sieht es doch gefälliger aus... face-wink
Member: cbli
cbli Nov 28, 2006 at 09:54:43 (UTC)
Goto Top
@echo off <b> &
> setlocal enableDelayedExpansion</b>
> Set "inhalt=%temp%\inhalt.tmp"  
> For %%x in (.xls .doc .chm .txt ) do (
>     for %%i in ("d:\temp\*.zip")  
> do ( 
>          7za l -slt "%%i" |  
> findstr /c:"Path = " > %Inhalt%  
> & findstr "%%x" %Inhalt%  
> >nul<b>& If !errorlevel! == 0 (
>                move /y "%%i"  
> d:\temp\verarbeitet
>                ) ELSE (
>                echo Keine Dateien mit
> Extension [%%x] in Datei %%i vorhanden.
>              ) </b>
>     )
> )

Funktioniert soweit ganz gut. Eigentlich wollte ich ,daß er ,wenn er keine zu verarbeitenden Zip Dateien mehr findet zu folgender Routine springt

:keinezips

@echo off
cls
echo.
echo.
echo   Keine Zip Dateien momentan vorhanden
echo.
echo.
echo    [1]  Hauptmenue
echo.
echo.
echo    [2]  Beenden
echo.
echo.

set choice=
set /p choice= Bitte einfach die gewuenschte Ziffer druecken      

if not ´%choice%´==´´ set choice=%choice:~0,1%
if ´%choice%´==´1´ goto start
if ´%choice%´==´2´ goto Beenden
:ECHO "%choice%" Keine gueltige Auswahl 
ECHO.
goto keinezips

Ich habe also den echo Befehl mit dem "goto keinezips" Befehl ersetzt.
Resultat war,daß er sofort immer den goto Befehl ausführt auch wenn noch zu verarbeitende zip Dateien vorhanden sind.
d.h wenn die erste gefundene Zip Datei nicht meine gewünschten Extensions enthält,führt er den goto Befehl aus ohne die restlichen Zip Dateien zu checken.
Wie löse ich das ?

Danke

Gruß
Claus
Member: Biber
Biber Nov 28, 2006 at 10:40:21 (UTC)
Goto Top
Moin cbli,

uuups, das ist eine ganz andere Frage - bzw. ich habe zu etwas ganz anderem geantwortet. Sorry.

Meine Äpfel-Antwort:
Wie kann ich anzeigen, wenn in einer der *.zip-Dateien keine Dateien vom Typ [.xls ODER .doc ODER .chm ODER .txt] vorhanden sind?

Deine Birnen-Frage:
a) Was tun, wenn gar keine Zip-Dateien vorliegen?
@echo off & setlocal enableDelayedExpansion
Set "inhalt=%temp%\inhalt.tmp"  
<b>Set "pathwithZips=d:\temp\*.zip"  
If not exist "%pathwithZips% goto keinezips</b>  
....[weiter wie bisher]
-und/oder-
b) Wie kann ich anzeigen, wenn zwar zip-Dateien vorliegen, aber in den Zip-Dateien überhaupt keine Dateien mit den gesuchten Extensions [xls .doc .chm .txt] vorliegen?

...[ Prüfung vorschalten....nach bzw. zusätzlich zu der obigen Änderung]
For %%x in (.xls .doc .chm .txt ) do (
    7za l -slt "%pathwithZips%"|findstr /c:"Path = "|findstr "%%x" || echo Keine Dateien vom Typ "%%x" vorhanden!  
 
...
-oder-
...[ Prüfung vorschalten....nach bzw. zusätzlich zu der obigen Änderung]

For %%x in (.xls .doc .chm .txt ) do (
    7za l -slt "%pathwithZips%"|findstr /c:"Path = "|findstr "%%x" && set "MeineExtFound=Habbich"  
)
If undefined MeineExtFound (
     echo keine einzige der gesuchten Dateitypen ist enthalten!
     goto keineMeinerGesuchtenExtensionsDa
)
...

Da ich denke, das Deine Frage "Birnen a)" war, führe ich den Fall "Birnen b)" erstmal nicht zu Ende.
Denn warum sollte irgendetwas vom Ablauf her anderes passieren, wenn in den Zip-Dateien , in denen Du nach [.xls .doc .chm .txt] suchst zwar *.xls und .txt-Dateien vorhanden sind, aber diesmal keine .chm's...

Gruß
Biber
[Edit] Den von bastla (Thx!) unten lokalisierten Tippfehler korrigiert.
Falsch="%pathwithZips" Richtiger="%pathwithZips%"  
Member: cbli
cbli Nov 28, 2006 at 11:46:55 (UTC)
Goto Top
Moin cbli,

uuups, das ist eine ganz andere Frage - bzw.
ich habe zu etwas ganz anderem geantwortet.
Sorry.

Meine Äpfel-Antwort:
Wie kann ich anzeigen, wenn in
einer der *.zip-Dateien
keine Dateien vom Typ [.xls ODER .doc ODER
.chm ODER .txt] vorhanden sind?

Deine Birnen-Frage:
a) Was tun, wenn gar keine Zip-Dateien
vorliegen?
@echo off & setlocal
> enableDelayedExpansion
> Set "inhalt=%temp%\inhalt.tmp"  
> <b>Set
> "pathwithZips=d:\temp\*.zip"  
> If not exist "%pathwithZips% goto  
> keinezips</b>
> ....[weiter wie bisher]
> 
-und/oder-
b) Wie kann ich anzeigen, wenn zwar
zip-Dateien vorliegen, aber in den
Zip-Dateien überhaupt keine Dateien mit
den gesuchten Extensions [xls .doc .chm .txt]
vorliegen?

> ...[ Prüfung vorschalten....nach bzw.
> zusätzlich zu der obigen Änderung]
> For %%x in (.xls .doc .chm .txt ) do (
>     7za l -slt
> "%pathwithZips"|findstr  
> /c:"Path = "|findstr  
> "%%x" || echo Keine Dateien vom Typ  
> "%%x" vorhanden!  
>  
> ...
> 
-oder-
> ...[ Prüfung vorschalten....nach bzw.
> zusätzlich zu der obigen Änderung]
> 
> For %%x in (.xls .doc .chm .txt ) do (
>     7za l -slt
> "%pathwithZips"|findstr  
> /c:"Path = "|findstr  
> "%%x" && set  
> "MeineExtFound=Habbich"  
> )
> If undefined MeineExtFound (
>      echo keine einzige der gesuchten
> Dateitypen ist enthalten!
>      goto keineMeinerGesuchtenExtensionsDa
> )
> ...
> 

Da ich denke, das Deine Frage "Birnen
a)" war, führe ich den Fall
"Birnen b)" erstmal nicht zu Ende.
Denn warum sollte irgendetwas vom Ablauf her
anderes passieren, wenn in den Zip-Dateien ,
in denen Du nach [.xls .doc .chm .txt] suchst
zwar *.xls und .txt-Dateien vorhanden sind,
aber diesmal keine .chm's...

Gruß
Biber


Irgendwie war das wohl ein Mißverständnis oder ich hab nicht kapiert was du geantwortet hast.
Es kommt nämlich bei meinen Tests immer das gleiche Ergebnis wie schon vor meinem Erstposting.
Ich wollte eigentlich nur das er

d:\temp

auf Zip Dateien mit den gewünschten Datei Extentions überprüft und im ja Fall mit der bereits funktionierenden Verarbeitung weitermacht.
Im Nein Fall soll er zu keinezipsext springen

:keinezipsext

@echo off
cls
echo.
echo.
echo Keine Zip Dateien mit Ext momentan vorhanden
echo.
echo.
echo [1] Hauptmenue
echo.
echo.
echo [2] Beenden
echo.
echo.

set choice=
set /p choice= Bitte einfach die gewuenschte Ziffer druecken

if not &acute;%choice%&acute;==&acute;&acute; set choice=%choice:~0,1%
if &acute;%choice%&acute;==&acute;1&acute; goto start
if &acute;%choice%&acute;==&acute;2&acute; goto Beenden
:ECHO "%choice%" Keine gueltige Auswahl 
ECHO.
goto keinezipsext

Die generelle Überprüfung ob in

d:\temp

überhaupt zip Dateien (ganz gleich mit oder ohne die Datei Ext) sind, hatte ich schon von Anfang an drin und darum gings mir nie.
Entschuldige wenn ich mich vielleicht etwas undeutlich ausgedrückt habe.

Gruß
Claus
Member: bastla
bastla Nov 28, 2006 at 14:40:28 (UTC)
Goto Top
Hallo Claus!

Überprüfst Du zur Sicherheit, ob bei Dir jeweils
"%pathwithZips%"  
steht. Es scheint fast, als würde aufgrund von Provider-Sparmaßnahmen (um Rücklagen für die Vorratsdatenspeicherung zu bilden? face-wink) gelegentlich ein Byte nicht transportiert (zB das schließende %-Zeichen).

Grüße
bastla

P.S.: Tut zwar nix zur Sache, aber bei mir fehlte heute an anderer Stelle auch schon mal ein ">" - bedenklich ...
Member: Biber
Biber Nov 28, 2006 at 16:19:20 (UTC)
Goto Top
Moin clib,

bastla hatte recht, ich hatte einen Tippfehler drin. Ist oben korrigiert.

Sicherheitshalber hier noch mal die Birnen-b)-Skizze im ganzen Satz:
::--kombiniertes clib- und Biber-Geraffel; <b>Neueres</b> in <b>fett</b>
@echo off & setlocal enableDelayedExpansion
<b>Set "inhalt=%temp%\inhalt.tmp"  
Set "pathwithZips=d:\temp\*.zip"  
Set "AlleExt=.xls .doc .chm .txt"</b>  

:keinezips
cls
echo.
echo.
echo Keine Zip Dateien momentan vorhanden
echo.
echo.
echo [1] Hauptmenue
echo.
echo.
echo [2] Beenden
echo.
echo.

set choice=
set /p <b>"choice= Bitte einfach die gewuenschte Ziffer druecken "</b>  

if not '%choice%'=='' set choice=%choice:~0,1%  
if '%choice%'=='1' goto start  
if '%choice%'=='2' goto Beenden  
:ECHO "%choice%" Keine gueltige Auswahl 
ECHO.
goto keinezips
<b>:start
For %%x in (%AlleExt% ) do (
    7za l -slt "%pathwithZips%"|findstr /c:"Path = "|findstr "%%x" && set "MeineExtFound=Habbich"  
)
If not defined MeineExtFound goto keineZips</b>
:: ...wer hier ankommt, hat mindestens in einer *.zip-Datei eine passende Datei mit Endung in %AlleExt% gefunden
For %%x in (%AlleExt% ) do (
    7za l -slt "%pathwithZips"|findstr /c:"Path = "|findstr "%%x"  
    for %%i in ("%pathwithZips") do (   
         @7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr "%%x" %Inhalt% >nul & If !errorlevel! == 0 (  
               move /y "%%i" d:\temp\verarbeitet  
               ) ELSE (
               echo Keine Dateien mit Extension [%%x] in Datei %%i vorhanden.
             ) 
    )
)
goto keinezips
:Beenden

Ob Du die andere Erweiterung...
...
         @7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr "%%x" %Inhalt% >nul & If !errorlevel! == 0 (  
               move /y "%%i" d:\temp\verarbeitet  
               ) ELSE (
               echo Keine Dateien mit Extension [%%x] in Datei %%i vorhanden.
             ) 
...drinlässt oder zurückdrehst auf..
...
         @7za l -slt "%%i" | findstr /c:"Path = " > %Inhalt% & findstr "%%x" %Inhalt% >nul && move /y "%%i" d:\temp\verarbeitet  
... ist unwesentlich und Geschmackssache.

Ach ja, und sag einfach formlos Bescheid, wenn wir diesen Thread schließen können...

Gruß
Biber

Dank an bastla fürs Fehler-Lokalisieren.
Member: bastla
bastla Nov 28, 2006 at 17:04:20 (UTC)
Goto Top
@Biber
Nix zu danken, wenn's denn ein Mal umgekehrt ist ...
Außerdem war ich hier ja auch nicht ganz unzuständig. face-wink

Grüße
bastla
Member: cbli
cbli Nov 28, 2006 at 17:13:50 (UTC)
Goto Top
Erstmal Danke für die Hilfe !
Scheint jetzt zu funktionieren.
Lag wirklich an den fehlenden %. Danke hier nochmal an bastla.
Allerdings hätte ich noch eine Frage, deren Lösung ich für später gebrauchen könnte und die viel aus diesem Thread beinhaltet,weswegen ich auch keinen neuen aufmachen wollte.

Die verarbeitetenden Zips habe ich bisher nicht gelöscht sondern in ein anderes Verzeichnis verschieben lassen ,wo sie quasi "rumlungern".
Wie müsste der Code aussehen wenn ich diese Zip Dateien als Grundlage für Löschaktionen benutzen wollte.

1. Es soll wieder auf bestimmte Extensions geprüft werden
2. Bei vorhandensein soll der ganze Inhalt der Zipdatei als Grundlage fürs löschen benutzt
werden (also nicht nur die gewünschten Extensions).
3. Es soll aber nichts aus der Zip gelöscht werden ,sondern quasi die Dateien die da rauszu-
holen wären,sind in einem anderen Verzeichnis schon entpackt vorhanden und nur die
Dateien die sich sowohl in der Zip Datei ,als auch im anderen Verzeichnis befinden, sollen
gelöscht werden.

Beispiel

d:\temp\lager\*.zip

Hier soll die Abfrage stattfinden auf die gewünschten Extensions

c:\programme\verarbeitet\

Hier befinden sich die Dateien mit denen die Zipinhalte abgeglichen werden sollen.
Bei Übereinstimmung sollen die Dateien aus

c:\programme\verarbeitet\

gelöscht werden. Die Zipdatei soll nicht gelöscht oder verändert werden.
Auch sonstige Dateien in c:\programme\verarbeitet\ sollen nicht von der Löschung betroffen sein.

Ich hab mal versucht das so zu lösen , geht aber nicht.

for %%k in ("d:\temp\lager\*.zip") do 7za l -slt "%%k" | findstr /c:"Path = " > %Inhalt% & findstr ".xls" %Inhalt% >nul & If !errorlevel! == 0 (  
               del /y "%%k" "c:\programme\verarbeitet\")  

Geht das überhaupt ?

Danke

Gruß
Claus
Member: bastla
bastla Nov 28, 2006 at 17:40:02 (UTC)
Goto Top
Hallo Claus!

Wie ich es verstanden habe, genügt es, die Inhalte der ".zip"-Dateien mit den Dateien in "C:\Programme\verarbeitet" zu vergleichen. Ist eine Datei sowohl in der ".zip"-Datei, als auch in "C:\Programme\verarbeitet", so wird sie im Ordner gelöscht - dies unabhängig vom Typ, da in "C:\Programme\verarbeitet" ohnehin nur (vom Typ her) passende Dateien sein sollten. Dann:
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"  

Grüße
bastla

[Edit] Anführungszeichen nachgereicht [/Edit]
Member: cbli
cbli Nov 29, 2006 at 09:36:44 (UTC)
Goto Top
So habe deine Lösung nun ausgiebig getestet und sie funktioniert wunderbar !!
Vielen Dank dafür.
Der Thread kann nun als gelöst gesetzt und geschlossen werden.

Gruß
Claus
Member: Biber
Biber Nov 29, 2006 at 09:48:02 (UTC)
Goto Top
Der Thread kann nun als gelöst gesetzt und geschlossen werden.

DONE !
*Drei Kreuze mach*

Grüße
Biber