minicoop
Goto Top

Batch für DS von Daten mit fortlaufender Nummer

Hallo,

folgende annahme:
im verzeichnis c:\test liegen jede menge edi dateien mit dem namen import_fortlaufendernummer.edi mit dem erstellungsdatum als sortierung.
diese sollen dann in jjjj\mm jeweils am ende vom monat weggemoved werden.
die verzeichnisanlegerei bekomme ich noch hin,
if exist c:\test\*.dat FOR /F "usebackq eol=; tokens=2,3,4* delims=. " %%i in (`Date /T`) do if not exist .\%%k mkdir .\%%k
if exist c:\test\*.dat FOR /F "usebackq eol=; tokens=2,3,4* delims=. " %%i in (`Date /T`) do if not exist %%k\%%j mkdir %%k\%%j
leider hängt es bei mir momentan an der erkennung vom datum für die entsprechenden dateien.
in dem verzeichnis sind pro monat ca 30000 dateien, und jedesmal wenn ich was suchen möchte, braucht der eine ewigkeit bis der mal
das verzeichnis anzeigt. deswegen die aufräumaktion.

wäre super wenn jemand mir da weiterhelfen könnte.

Content-Key: 78285

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

Printed on: April 16, 2024 at 16:04 o'clock

Member: bastla
bastla Jan 16, 2008 at 11:08:59 (UTC)
Goto Top
Hallo minicoop!

Versuch es mal so:
for %%i in (C:\Test\import_*.edi) do for /f "tokens=2,3* delims=. " %%a in ("%%~ti") do echo move %%i %%b\%%a\  
Das "echo" vor dem "move" sorgt dafür, dass der Verschiebebefehl (zum Testen) nur angezeigt, aber nicht ausgeführt wird.

Zum Erstellen der Ordner noch ein Hinweis: Es genügt eigentlich
if exist c:\test\*.dat FOR /F "tokens=2,3,4* delims=. " %%i in (`Date /T`) do if not exist %%k\%%j md %%k\%%j  
da der "Jahresordner" dabei automatisch erstellt wird.

Grüße
bastla

[Edit] Unter W2000 wird die Jahreszahl (%%b) nur zweistellig ausgegeben und muss daher durch ein vorangestelltes 20 ergänzt werden. [/Edit]
Member: minicoop
minicoop Jan 16, 2008 at 12:16:19 (UTC)
Goto Top
Hallo Bastla,

funktioniert wunderbar.
Wusste nicht das man das auch in einer for schleife abarbeiten lassen kann.

vielen dank.

aber woher holt dieser das datum herbei? %%~ti ?
den schritt habe ich nicht ganz verstanden...

kann man theoretisch hier auch hingehen und sagen alles was älter ist wie eine woche soll er in die entsprechenden ordner verschieben ?
Dann würde ich das jede woche ablaufen lassen und die menge wäre dann nicht zu viel..


Gruss
Nedim
Member: Biber
Biber Jan 16, 2008 at 13:38:29 (UTC)
Goto Top
Moin Nedim,

kann man theoretisch hier auch hingehen und sagen alles was älter ist wie eine woche soll er in die entsprechenden ordner verschieben ?
Ja, theoretisch schon... haben wir hier im Forum auch schon ein paarmal gemacht.
Allerdings wird es dann mit Batch-Mitteln etwas hakelig (wie man/frau in Bremen so sacht), weil die CMD.exe nicht mit Datumswerten (Datumsdifferenzen) "rechnen kann.

Deshalb
a) prüfen, ob auch einmal im Monat statt einmal pro Woche für diesen Batchjob akzeptabel wäre. Denn die Vergleichsmöglichkeiten mit "Monat" und "Jahr" hast Du ja/nutzt Du ja bereits.
b) kannst Du natürlich noch eine Datum-älter-als-Prüfung einbauen über einen VBS-Skript-Aufruf.
Dazu findest Du wie geschrieben eine Menge Beispiele hier im Forum (Suchfunktion "Dateien älter als")
c) Drittens könntest Du auch von einem schnelleren Utility (z.B. mit "XCopy /L") eine Liste aller Dateien älter als whatever erzuegen lassen und diese abarbeiten statt den kompletten Verzeichnisinhalt.

Bitte stöbere erst versuchsweise hier in den vorhandenen Lösungen - solltest Du dort nichts finden, dann melde Dich nochmals hier.

Grüße
Biber
Member: minicoop
minicoop Jan 16, 2008 at 13:58:48 (UTC)
Goto Top
hallo biber,

danke für die info.
bin eben beim ausprobieren über folgenden fehler gestossen..
beim ausführen der zeile
if exist c:\test\*.dat FOR /F "tokens=2,3,4* delims=. " %%i in (`Date /T`) do if not exist %%k\%%j md %%k\%%j
kommt auf einmal die fehlermeldung
Die Datei "`Date" kann nicht gefunden werden.

schonmal gesehen ?

very mysteriös...
Member: Biber
Biber Jan 16, 2008 at 14:06:37 (UTC)
Goto Top
Moin Nedim,

dann entweder die "einfachen" Anführungszeichen nehmen:

FOR /F "tokens=2,3,4* delims=. " %%i in ('Date /T') do ...
-oder auf die Variable %date% zugreifen:
FOR /F "tokens=2,3,4* delims=. " %%i in ("%date%") do ..
- oder wieder den Schalter "usebackq" wie ganz oben einbauen.

Grüße
Biber
Member: bastla
bastla Jan 16, 2008 at 14:30:51 (UTC)
Goto Top
Hallo minicoop!

Scheint so, als wären die Hochkommata in `Date /T`auf "typographisch" geändert worden - eigentlich sollten sie so
'  
aussehen ... (Das war jetzt die kürzeste Code-Zeile, die ich hier je gepostet habe. face-wink)

Noch als Nachtrag:
aber woher holt dieser das datum herbei? %%~ti ?
Infos zu "~t" (und ein paar anderen Möglichkeiten) findest Du gegen Ende der Hilfe zu "for" (for /?)

Grüße
bastla
Member: minicoop
minicoop Jan 16, 2008 at 14:40:55 (UTC)
Goto Top
face-wink
premiere..
ich sag mal vielen dank an alle.
habt mir sehr weitergeholfen.

Gruss
Nedim