ketschupmajo
Goto Top

Batch Datei soll aus Datum eines Dateinamen ein Ordner-Archiv erstellen

Hallo Forumwelt,
wie ich im Titel schon erwähnt habe, bin ich gerade wieder im .bat Fieber.
Da ich aber noch nie so tief im Batch-Datei-Schreiben drin war hoffe ich auf kleine Hilfe.

Meine Aufgabe ist aus einem Dateinamen einer PDF Datei ein Archiv aufzubauen.
Der Dateiname baut sich wie folgt auf: 0000_240212_0000_00000_0000.pdf
Die Nullen sind sich ändernde Elemente die Zahlen sind das Datum. (Also heutiges Datum der 24. Feburar 2012)

Am allerbesten wäre es jetzt wenn ich es hinbekommen würde wenn die Batch den Dateinamen zerlegen, und anhand es zweiten "Blocks" das Datum auslesen kann.
Anschließend soll eine Ordnerstruktur anlegt werden, bzw.sollte die Batch checken ob eine andere Datei vorher schon den Ordner angelegt hat. (if Befehl)

Das Archiv würde ich mir wie folgt vorstellen

Archiv
Jahr
Monat
Tag

Wie gehe ich da am besten vor...?


Vielen Dank schonmal für die Hilfe...

Content-ID: 181000

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

Ausgedruckt am: 14.11.2024 um 07:11 Uhr

Skyemugen
Skyemugen 24.02.2012 um 10:44:02 Uhr
Goto Top
Aloha,

du möchtest es also alleine lösen?

In Ordnung, dann hier die Tipps:

Tutorial zur FOR-Schleife

du benötigst eine for /f mit _ als Trennzeichen, die den 2. Block als Variable setzt, dazu setzt du dann am Ende einfach mkdir Archiv\%Variable:~-2%\%Variable:~2,2%\%Variable:~0,2%

greetz André
KetschupMajo
KetschupMajo 24.02.2012 um 11:51:17 Uhr
Goto Top
Danke - ich hab nicht genau gewusst wie ich an das ganzer erstmal rangehe... versuche mal was und poste dann mal wie weit ich komme... DANKE schonmal
bastla
bastla 24.02.2012 um 13:02:31 Uhr
Goto Top
@skye
Einen Hinweis auf delayedEpansion könntest Du noch spendieren ... face-wink

Grüße
bastla
KetschupMajo
KetschupMajo 26.02.2012 um 18:02:06 Uhr
Goto Top
For /R C:\.......\Eingang\*.pdf %i IN (*.pdf) DO mkdir C:\.......\Archiv\%i:~-2%\%i:~2,2%\%i:~0,2%

soweit komme ich schonmal... könntet Ihr mir noch nen kurzen Tipp geben...?
Jetzt setzt er glaub ich soweit ich das Verstanden habe den kompletten Dateinamen als Variable, oder? wie mache ich das jetzt dass er nur den zweiten Block nimmt... ?

Muss ich da jetzt noch Tokens einbauen? -> FOR /F "tokens=2 delims=_"
An welche Stelle und müssen Tokens ins "Klammern" oder in `diesen Dingern´ stehen?
Skyemugen
Skyemugen 26.02.2012 um 20:34:39 Uhr
Goto Top
Zitat von @KetschupMajo:
Muss ich da jetzt noch Tokens einbauen? -> FOR /F "tokens=2 delims=_"
Die Frage ist jetzt (gerade nach meinem 1. Posting) nicht dein Ernst, oder?
An welche Stelle und müssen Tokens ins "Klammern" oder in `diesen Dingern´ stehen?
?

Entschuldige aber tust du mir den Gefallen und beschreibst dein Vorhaben mal genauer, denn von
Meine Aufgabe ist aus einem Dateinamen einer PDF Datei ein Archiv aufzubauen
nach
FOR /R

ist ein verdammt weiter weg ... den ich wenn dann sowieso gleich mit
for /f "tokens=2 delims=_" %%s in ('dir /b /s "%Pfad%\*.pdf"') do ...  
gehen würde

...

greetz André

P.S.: @bastla, hm abwarten face-wink
bastla
bastla 26.02.2012 um 20:56:57 Uhr
Goto Top
@skye
for /f "tokens=2 delims=_" %%s in ('dir /b /s "%Pfad%\*.pdf"') do ...
Wenn Du gleich zerlegst, fehlt Dir aber der Gesamtpfad - und da ja vermutlich doch mehr gewünscht ist, als nur eine Ordnerstruktur zu erstellen, wird der vermutlich noch gebraucht ...
Stringzerlegung (des Datums) ohne Unterprogramm und ohne geeignete Delimiter könnte ohne "delayedExpansion" etwas schwierig werden ...

Grüße
bastla
Skyemugen
Skyemugen 26.02.2012 um 21:19:07 Uhr
Goto Top
@bastla
könnte und vermutlich ...

und zum DEp bleibe ich bei meinem
abwarten
Ich wähle Tor 2 und tausche den grünen Umschlag.
KetschupMajo
KetschupMajo 26.02.2012 um 23:57:02 Uhr
Goto Top
Zitat von @Skyemugen:
> Zitat von @KetschupMajo:
> ----
> Muss ich da jetzt noch Tokens einbauen? -> FOR /F "tokens=2 delims=_"
Die Frage ist jetzt (gerade nach meinem 1. Posting) nicht dein Ernst, oder?

;-( Du hast ja recht - hatte ich nicht richtig gelesen.... Hattest es ja eh schon erwähnt...

und ja.... es ist natürlich nicht nur eine Datei... nur soll anhand aller eingehenden .pdf Dateien ein Archiv aufgebaut werden. Anschließend soll das .pdf einmal ins Archiv verschoben und an eine andere Stelle kopiert werden.... das wäre dann ja wieder nicht mehr das Problem...
Skyemugen
Skyemugen 27.02.2012 um 07:23:55 Uhr
Goto Top
Aloha,

die Dateien liegen in einem Verzeichnis, ist das korrekt? Oder gibt es in Eingang auch Unterverzeichnisse? for /R oder nicht for /R, das ist hier die Option ;D

greetz André


Ok. cmd will mich heute verarschen, Unterprogramm funktioniert nicht, ich kapier's nicht, Wert bleibt beim 1. Mal leer und selbst if defined wird ausgeführt, wenn Wert leer ist und beim 2. Mal wird einfach der erste Wert genommen, UARGH!!!!

Gut, dann nehme ich eben bastlas DEp, auch wenn ich es nicht mag

@echo off & setlocal enabledelayedexpansion
set "Pfad=E:\Test"  
set "Archiv=E:\Archiv"  
set "Kopie=E:\svn"  
for %%s in ("%Pfad%\????_??????_????_?????_????.pdf") do (  
	for /f "tokens=2 delims=_" %%m in ("%%~ns") do (  
		set "Wert=%%m"  
		mkdir "%Archiv%\!Wert:~-2!\!Wert:~2,2!\!Wert:~0,2!"2>nul  
		copy "%%s" "%Kopie%">nul  
		move "%%s" "%Archiv%\!Wert:~-2!\!Wert:~2,2!\!Wert:~0,2!"  
	)
)
pause
goto :eof

Ich bin heute mal so frei und gehe erst ein mal von einem Verzeichnis aus, wenn's nicht passt, der TE soll ja eigentlich nur angeregt werden face-wink

Hm, besser der TE setzt vor move noch ein echo, zum Anschauen face-wink (eventuell auch vor mkdir und copy, wenn er's mag.

Die Abfrage, ob ein Verzeichnis bereits existiert, erspare ich mir und unterdrücke einfach die Fehlermeldung, wenn dem so sein sollte ^__^
KetschupMajo
KetschupMajo 27.02.2012 um 09:52:10 Uhr
Goto Top
Zitat von @Skyemugen:
Aloha,

die Dateien liegen in einem Verzeichnis, ist das korrekt? Oder gibt es in Eingang auch Unterverzeichnisse? for /R odernicht for /R, das ist hier die Option ;D

Nein - Unterverzeichnisse sind keine vorhanden....

OK - jetzt hast Du mich leicht überfordert.... ich hab Dir mal kurz markiert was ich nicht verstehe - der Rest ist klar...

@echo off & setlocal enabledelayedexpansion
set "Pfad=E:\Test"
set "Archiv=E:\Archiv"
set "Kopie=E:\svn"
for %%s in ("%Pfad%\????_??????_????_?????_????.pdf") do (
for /f "tokens=2 delims=_" %%m in ("%%~ns") do (
set "Wert=%%m"
mkdir "%Archiv%\!Wert:~-2!\!Wert:~2,2!\!Wert:~0,2!"2>nul
copy "%%s" "%Kopie%">nul
move "%%s" "%Archiv%\!Wert:~-2!\!Wert:~2,2!\!Wert:~0,2!"
)
)
pause
goto :eof
Skyemugen
Skyemugen 27.02.2012 um 10:25:36 Uhr
Goto Top
Aloha,

2>nul

Fehlerkanal wird ins Nirvana umgeleitet (unterdrückt), da ich mir die if exist-Abfrage der Verzeichnisse erspare (denn wenn mehrere Dateien dasselbe Datum aufweisen, existiert das Verzeichnis bei der 2. Datei ja bereits), würde eine Fehlermeldung kommen, dass das Verzeichnis bereits existiert

beim Kopieren unterdrücke ich die normale Ausgabe (nicht die Fehlerausgabe), da das cmd-Fenster sonst voll mit 1 Datei(en) erfolgreich kopiert wäre ;D


greetz André
bastla
bastla 27.02.2012 um 12:14:43 Uhr
Goto Top
@skye
Gut, dann nehme ich eben bastlas DEp, auch wenn ich es nicht mag
Ich sag jetzt nix ... face-wink

Grüße
bastla
KetschupMajo
KetschupMajo 27.02.2012 um 12:26:50 Uhr
Goto Top
Klärt Ihr mich mal auf? face-smile
oder ist das ein Interna?
bastla
bastla 27.02.2012 um 18:39:28 Uhr
Goto Top
Hallo KetchupMajo!

oder ist das ein Interna?
Ja - ein Internum dieses Threads face-wink (ich wollte nur einfach den "Zonk" nicht erwähnen - *ups, jetzt isses doch passiert*) ...

Grüße
bastla
Biber
Biber 27.02.2012 um 19:13:52 Uhr
Goto Top
[genauso OT]
Moin KetschupMajo,

Zitat von @KetschupMajo:
Klärt Ihr mich mal auf? face-smile
oder ist das ein Interna?
Ich sach' ma so....

Ich will ja nicht kategorisch ausschliessen, dass es hier auch versprengte Einzel-Interna gibt in unserem schönen Fora.
meine selige Tante Gertrude nahm ja auch immer nur ein Antibiotika .

P.S Und rein interessehalber: wenn ihr als Familie auftretet, kommt ihr dann als KetschupsMajo oder als KetschupMajos oder als KetschupsMajos??

Na ja, Hauptsache jeder bleibt ein Individua.

Grüße
Biber
[/genauso OT]