klatschbirne08
Goto Top

Dateien per Batch, Script in passende Ordner verschieben

Guten Morgen,

ich würde gern die tägliche Arbeit bei uns etwas vereinfachen, da zur Zeit sehr viele Dateien per Hand verwoben werden müssen. Mit meinen Grundlagenwissen komme ich leider grade nicht wirklich weiter, aber vielleicht könnt ihr mir ja etwas helfen.

Ich habe folgendes Problem:

es werden bei uns Dateien in C:\Data\ erzeugt.

die Labelcodes der Dateien lauten: XX_100523_S_B_a_S01_D1.dat
kurze erläuterung des Codes:
XX = Tool
10 = Jahreszahl (hier 2010)
05 = Monat
der Rest ist für die Zuordnung egal.

diese sollen nun automatisiert in die richtigen Zielordner kopiert werden.
diese Liegen dann unter: X:\Data\Jahreszahl\Monat\Ordner mit entsprechenden Labelcode\

in diesem Beispiel: X:\Data\2010\05\XX_100523_S_B_a\


Nun sollte am besten in den jeweiligen Pfad ein zusätzlicher Ordner Namens lifetime angelegt werden, worein die Daten zu verschieben wären.

Jetzt meine Frage ist das zu bewerkstelligen? bzw. könntet ihr mir da vielleicht weiter helfen?

Vielen Dank im voraus schonmal.
Klatschbirne08
Kommentar vom Moderator Biber am Feb 25, 2011 um 16:16:33 Uhr
Bereits gelösten Beitrag verschoben von "Entwicklung" nach "Batch & Shell'.

Content-Key: 161562

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

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

Member: bastla
bastla Feb 25, 2011 at 10:32:53 (UTC)
Goto Top
Hallo Klatschbirne08 und willkommen im Forum!

Unter der Voraussetzung, dass die Struktur (Aufteilung anhand des Trennzeichens "_") immer gleich ist, könnte das (völlig ungetestet) etwa so zu lösen sein:
@echo off & setlocal
set "Quelle=C:\Data"  
set "Typ=dat"  
set "Ziel=X:\Data"  

for %%i in ("%Quelle%\*.%Typ%") do (  
    for /f "tokens=1-5 delims=_" %%a in ("%%~ni") do (  
        set "Datum=%%b"  
        set "Ordner=%%a_%%b_%%c_%%d_%%e"  
    )
    call :ProcessFile "%%i"  
)
pause
goto :eof

:ProcessFile
set "ZielOrdner=%Ziel%\20%Datum:~0,2%\%Datum:~2,2%\%Ordner%"  
echo xcopy %1 "%ZielOrdner%\lifetime\"  
echo move %1 "%ZielOrdner%"  
goto :eof
Solange "echo" am Beginn der Zeilen 18 und 19 steht, werden der Kopier- bzw Verschiebebefehl zum Testen nur angezeigt - wenn Du diese "echo" entfernst ("pause" wirst Du dann auch nicht mehr benötigen), passiert's tatsächlich ... face-wink

Um Dein Grundlagenwissen etwas zu erweitern, könntest Du zB mit "set /?" die Onlinehilfe aufrufen und anhand der ca 4. Bildschirmseite (hoffentlich) nachvollziehen, was zB "%Datum:~0,2%" so macht ...

Grüße
bastla
Member: Klatschbirne08
Klatschbirne08 Feb 25, 2011 at 12:21:14 (UTC)
Goto Top
Danke hat fast funktioniert ;)

hab es noch bisschen abgeändert, da es nicht in lifetime kopiert hat sondern in den Unterordner. Aber nun funktioniert alles.
Member: bastla
bastla Feb 25, 2011 at 15:24:05 (UTC)
Goto Top
Hallo Klatschbirne08!

Inwiefern
... nicht in lifetime kopiert ...
Sollte der Zielordner
X:\Data\2010\05\lifetime
sein?

Grüße
bastla
Member: Klatschbirne08
Klatschbirne08 Feb 25, 2011 at 15:47:19 (UTC)
Goto Top
Nein ;)

X:\Data\2010\05\XX_100523_S_B_a\lifetime

in der 19. zeile fehlte einfach nur ein \lifetime\ face-wink
Member: bastla
bastla Feb 25, 2011 at 16:30:42 (UTC)
Goto Top
Hallo Klatschbirne08!

Ich hatte Deine Wünsche
diese sollen nun automatisiert in die richtigen Zielordner kopiert werden.
und
Nun sollte am besten in den jeweiligen Pfad ein zusätzlicher Ordner Namens lifetime angelegt werden, worein die Daten zu verschieben wären.
so interpretiert, dass es die Datei dann zweimal geben sollte - dass in Zeile 18 zunächst in den Ordner "X:\Data\2010\05\XX_100523_S_B_a\lifetime" kopiert und dann in Zeile 19 erst in den Ordner "X:\Data\2010\05\XX_100523_S_B_a\" verschoben wird, hatte eigentlich nur den Grund, dass "xcopy" bei Bedarf automatisch den vollständigen Zielpfad erstellen kann - das Endergebnis wäre aber gleich gewesen, während ein Hinzufügen von "\lifetime\" in Zeile 19 ja dazu führt, dass die Datei nur noch einmal existiert ...

Aber wenn's so für Dich passt, soll's mir auch recht sein ... face-smile

Grüße
bastla