Batchprogramm zur Komprimierung von Unterverzeichnissen (Windows XP) - Skriptanpassung
Hallo,
habe zwar schon die Suche bemüht, jedoch kein Beispiel gefunden, welches genau passt.
In einem Verzeichnis
C:\Kunden\
existiere 4 weitere Verzeichnisse
Kunde_1
Kunde_2
Kunde_3
Kunde_4
In diesen Verzeichnissen befindet sich eine unterschiedliche Anzahl an Unterverzeichnissen, deren Namen nicht genau bekannt sind.
Beispiels weise
C:\Kunden\Kunde_1\1_Rechnungen_1
C:\Kunden\Kunde_1\1_Rechnungen_2
C:\Kunden\Kunde_1\1_Rechnungen_3
und
C:\Kunden\Kunde_2\2_Rechnungen_1
C:\Kunden\Kunde_2\2_Rechnungen_2
C:\Kunden\Kunde_2\2_Rechnungen_3
In den Rechnungsordnern sind meist mehrere 1.000 Dateien enthalten. Meist 4.200.
Nun müssen diese Rechnungsverzeichnisse als passwortgeschützte Zip-Dateien archiert werden.
Die Namen der Ziparchive sollen die Rechnungsordnernamen tragen
also für das Verzeichnis: C:\Kunden\Kunde_2\2_Rechnungen_1 --> 2_Rechnungen_1.zip
Dies wir mit folgendem Skript erreicht (%% da es sich um ein Batch-Skript handelt)
For /f "Delims=\ tokens=2-5" %%a in ('dir /b /s /a:d c:\Dateien\.') do @if "%%a%%b" neq "" if "%%c" neq "" if "%%d" equ "" 7z.exe a -pGEHEIM -mx0 c:\Dateien_gezippt\%%c.zip %%~da\%%a\%%b\ >>c:\Dateien_gezippt\log-%%c.txt
Es funktioniert soweit, jedoch werden beim Kunden2 die Rechnungen 1+2 in eine zip Datei gelegt. Diese Datei wird dann immer und immer wieder erzeugt.
In anderen Verzeichnissen funktioniert es.
Die Verzeichnisse sind auch nicht mit mehr Dateien gefüllt und haben auch keine andere Berechtigung.
Wo ist der Denkfehler ?
Fehler im Skript?
Danke vorab für eure Hilfe
TheJoker2305
habe zwar schon die Suche bemüht, jedoch kein Beispiel gefunden, welches genau passt.
In einem Verzeichnis
C:\Kunden\
existiere 4 weitere Verzeichnisse
Kunde_1
Kunde_2
Kunde_3
Kunde_4
In diesen Verzeichnissen befindet sich eine unterschiedliche Anzahl an Unterverzeichnissen, deren Namen nicht genau bekannt sind.
Beispiels weise
C:\Kunden\Kunde_1\1_Rechnungen_1
C:\Kunden\Kunde_1\1_Rechnungen_2
C:\Kunden\Kunde_1\1_Rechnungen_3
und
C:\Kunden\Kunde_2\2_Rechnungen_1
C:\Kunden\Kunde_2\2_Rechnungen_2
C:\Kunden\Kunde_2\2_Rechnungen_3
In den Rechnungsordnern sind meist mehrere 1.000 Dateien enthalten. Meist 4.200.
Nun müssen diese Rechnungsverzeichnisse als passwortgeschützte Zip-Dateien archiert werden.
Die Namen der Ziparchive sollen die Rechnungsordnernamen tragen
also für das Verzeichnis: C:\Kunden\Kunde_2\2_Rechnungen_1 --> 2_Rechnungen_1.zip
Dies wir mit folgendem Skript erreicht (%% da es sich um ein Batch-Skript handelt)
For /f "Delims=\ tokens=2-5" %%a in ('dir /b /s /a:d c:\Dateien\.') do @if "%%a%%b" neq "" if "%%c" neq "" if "%%d" equ "" 7z.exe a -pGEHEIM -mx0 c:\Dateien_gezippt\%%c.zip %%~da\%%a\%%b\ >>c:\Dateien_gezippt\log-%%c.txt
Es funktioniert soweit, jedoch werden beim Kunden2 die Rechnungen 1+2 in eine zip Datei gelegt. Diese Datei wird dann immer und immer wieder erzeugt.
In anderen Verzeichnissen funktioniert es.
Die Verzeichnisse sind auch nicht mit mehr Dateien gefüllt und haben auch keine andere Berechtigung.
Wo ist der Denkfehler ?
Fehler im Skript?
Danke vorab für eure Hilfe
TheJoker2305
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 148009
Url: https://administrator.de/contentid/148009
Ausgedruckt am: 22.11.2024 um 00:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
füge doch bitte mal ein paar "Outputs" - also ohne führendes @echo off oder @echo off
gerne hinter > ein - denn dann muß man das nicht unbedingt nachstellen, sondern kannst evtl. schon bei dir sehen.
Denn warum du die tokens und neqs benutzt ist mir so nicht klar.
(und auch nicht, obs daran liegt.)
Gruß
füge doch bitte mal ein paar "Outputs" - also ohne führendes @echo off oder @echo off
gerne hinter > ein - denn dann muß man das nicht unbedingt nachstellen, sondern kannst evtl. schon bei dir sehen.
echo on
for ...
usw..
for ...
usw..
Denn warum du die tokens und neqs benutzt ist mir so nicht klar.
(und auch nicht, obs daran liegt.)
Gruß
Moin,
denk dran heute ist nicht nur Freitag, sondern auch Sysadminday und wohl der wärmste Tag der Woche.
demo
Damit kannst du mit %i den Kunden und mit %j den Orndernamen auswerten.
Hast du den Ordner nicht in c:\unterordner\UNterordner\Ordner\Kunde - mußt du die menge deiner "\" als Token angeben.
% für Demo %% für Batch
Gruß
denk dran heute ist nicht nur Freitag, sondern auch Sysadminday und wohl der wärmste Tag der Woche.
- kunde_1 kunde_2 sind phantasienamen, oder entsprechen die dem Muster abcdexyzusw_ziffer/zahl?
demo
>for /f "Tokens=4,* Delims=\" %i in ('"dir /B /s /AD C:\script\kunde"') do echo Kunde=%i°Ordner=%j
Damit kannst du mit %i den Kunden und mit %j den Orndernamen auswerten.
Hast du den Ordner nicht in c:\unterordner\UNterordner\Ordner\Kunde - mußt du die menge deiner "\" als Token angeben.
% für Demo %% für Batch
Gruß
Moin Teekasper,
und wenn du statt %%~da\%%a\%%b\ mal versuchst c:\%%a\%%b\%%c\?
Ich verstehe nicht, warum du T-Mos Vorschläge nicht wenigstens mal wohlwollend prüfst.
Wenn ich einen proof of concept deiner Zeile am CMD-Prompt mache, kommt rum/raus/rüber
[Das führende ">" NICHT mit eingeben; ist Teil meines CMD-Prompts]
wobei doch zumindest sofort ersichtlich wird:
Grüße
Biber
und wenn du statt %%~da\%%a\%%b\ mal versuchst c:\%%a\%%b\%%c\?
Ich verstehe nicht, warum du T-Mos Vorschläge nicht wenigstens mal wohlwollend prüfst.
Wenn ich einen proof of concept deiner Zeile am CMD-Prompt mache, kommt rum/raus/rüber
[Das führende ">" NICHT mit eingeben; ist Teil meines CMD-Prompts]
>for /f "delims=\ tokens=2-5" %a in ("C:\Kunden\Kunde_2\2_Rechnungen_1") do @echo "%a%b" c[%c] d[d] %~da\%a\%b\
"KundenKunde_2" c[2_Rechnungen_1] d[d] D:\Kunden\Kunde_2\
wobei doch zumindest sofort ersichtlich wird:
- die Anweisung "Tokens=2-5" schliesst Token 1 logischerweise aus->das ist das Laufwerk->also ist "%~da" ein Zufallswert.
- die Anweisung "Tokens=2-5" schlisst Token 5 == %e ein. Der wird nie nicht gebraucht
- im letzten Teil (="%~da\%a\%b\") steht aufgelöst dann "D:\Kunden\Kunde_2\" und nicht "c:\Kunden\Kunde_2\2_Rechnungen_1"
Grüße
Biber