stebbone
Goto Top

Batch Datei zum kopieren von Dateien

Ich komme bei diesem Prog. nicht weiter

Hallo liebe Profis =) ich bemüh mich eine Batch datei zu erstellen, welche Dateien in ein Archiv Verz. packt, das Erstellungsdatum an den Dateinamen anknüpft und sie anschließend in den richtigen "Monats" Ordner verschiebt.

Bsp.

in der Daten Quelle liegt folgende Datei: IAGEIS.123 diese kopiere ich in einen Archiv Ordner, daraus wird dann IAGEIS_2009.03.11.123
es wird also das Erstellungsdatum der Datei angehängt.
Ist dies getan, dann sollte die IAGEIS_2009.03.11.123 Datei noch in den richtigen Ordner verschoben werden.
Es sollten Ordner angelegt werden, für jeden Monat im Jahr, dabei sollte das Prog. auf das Erstelldatum der Datei achten und zB einen Ordner 200911 erstellen (jjjjmm) und alle Daten mit dem selben Monat dort hinein verschieben.

Ich bin bereits soweit, dass es das Erstelldatum an die Datei anhängt wird, jedoch nicht wie gewünscht, sondern im format : tt.mm.jjjj könnte mir viell. jmd. weiterhelfen wie ich dies in jjjj.mm.tt umschreibe? Und wie man die zugehörigen Ordner erstellt und die Dateien reinkopiert. Wär echt sehr nett.
Das ganze dient einer Archivierung, falls diese Angabe notwendig ist.

Hier mein Bisheriger Quellcode:
@echo off & setlocal
set "Quelle=C:\SUBELKE\WIN-DFUE\EMPFANG.ARC"  
set "Archiv=C:\SUBELKE\WIN-DFUE\ARCHIV\EMPFANG.ARC"  

if not exist "%Archiv%" md "%Archiv%"  
for /f "skip=5 tokens=1,3*" %%i in ('dir /a-d /tw "%Quelle%\*.*"^|findstr /v "Datei(en) Verzeichnis(se),"') do copy "%Quelle%\%%k" "%Archiv%\%%~nk_%%i%%~xk">nul  


set "Quelle2=C:\SUBELKE\WIN-DFUE\EMPFANG.HDR"  
set "Archiv2=C:\SUBELKE\WIN-DFUE\ARCHIV\EMPFANG.HDR"  

if not exist "%Archiv2%" md "%Archiv2%"  
for /f "skip=5 tokens=1,3*" %%i in ('dir /a-d /tw "%Quelle2%\*.*"^|findstr /v "Datei(en) Verzeichnis(se),"') do copy "%Quelle2%\%%k" "%Archiv2%\%%~nk_%%i%%~xk">nul  

Es gibt um genauer zu sein 2 Quellordner
Komm echt nicht weiter und bin für jede Hilfe dankbar!
Vielen dank im Vorraus

MfG Stebbo


[Edit Biber] Code in Code-Tags gesetzt. [/Edit]

Content-Key: 121234

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

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

Mitglied: 60730
60730 Jul 24, 2009 at 07:54:18 (UTC)
Goto Top
Servus,

schau dir dazu mal Bibers Anleitung Datum in Batch an.

Wobei ich dir zusätzlich empfehlen würde mit 7zip zu arbeiten, damit kriegst du fast jedes Archiv schön klein. (jpg/mp3 mal ausgeschlossen)

Gruß

edit:

jau nun hab ichs ganz gelesen und auch verstanden...
Bibers Anleitung ist das, was du suchst face-wink
Member: Stebbone
Stebbone Jul 24, 2009 at 08:04:39 (UTC)
Goto Top
Vielen Dank für deine Antwort.

Die Anleitung ist ziemlich umfangreich wenn ich die gleiche mein wie du...mal schauen ob sie mir weiterhilft.
Ich darf leider ausschließlich mit cmd also mit der Eingabeaufforderung arbeiten. Und auf dem PC sind noch andere Anwendungen, welche mit Deutschem Datum arbeiten müssen, ich denke um dies anderst zu verwirklichen ist keine allzu große änderung in meinem Quelltext (siehe oben) notwendig. Habe schon einiges ausprobiert aber klappt warum auch immer bei mir nicht. Bin auch nicht wirklich gut darin.
Mit den Ordnern denke ich mir viell. dass ich das Datum auslese das jahr & Monat an eine VAriable übergebe %%~nI oder so und dann durch diese ein Ordner erstelle in einer FOR-Schleife oder so...hmmm aber mir fehlt dazu einfach das Wissen, kenne nur Grundbefehle, leider, viell. ändert sich dies ja durch Beiträge von euch =)
Member: Iwan
Iwan Jul 24, 2009, updated at Oct 18, 2012 at 16:38:51 (UTC)
Goto Top
hallo,

für das Umstellen des Datums hab ich hier im Forum eine Lösung gefunden und etwas verändert:
for /f "tokens=1-4 delims=." %%i in ("%date%") do set "D=%%i" & set "M=%%j" & set "Y=%%k"  
Ergebnis für 24.07.2009 = "D=24" & "M=07" &"Y=2009"
diese Variablen kannst du ja dann auch dafür nutzen, die Datei in den richtigen Ordner zu verschieben:
REN IAGEIS.123 IAGEIS_%Y%.%M%.%D%.123
xcopy /v IAGEIS_%Y%.%M%.%D%.123 D:\%Y%\%M%\%D%\ 
Ergebnis wäre:
Datei "IAGEIS.123" wurde umbenannt in "IAGEIS_2009.07.24.123"
Datei wurde kopiert nach: D:\2009\07\24

hoffe das hilft face-wink
Member: Stebbone
Stebbone Jul 24, 2009 at 08:15:19 (UTC)
Goto Top
Dankeschön, soweit schon, muss dies noch an meinen vorhandenen Quellcode anpassen & ein weiteres Problem ist, dass die DAteien ja nicht alle IAGEIS.123 heißen, sie bestehen aus beliebihvielezeichen.3zeichen , also als endung.
Und es soll ja nicht das Aktuelle Datum sondern das Erstelldatum der Datei angehängt werden.
Bin weiterhin am Testen face-wink
Member: Stebbone
Stebbone Jul 24, 2009 at 08:31:02 (UTC)
Goto Top
Wäre es möglich, dass ihr eure Ideen an meinen Quelltext oben anpasst, weil ich damit immer sehr probleme hab oder ihn so umschreibt wie ihr es meint. Hoff dass ich mir nicht zuviel von euch erwarte....Danke =)
Mitglied: 60730
60730 Jul 24, 2009 at 09:46:16 (UTC)
Goto Top
Servus,

um dein Problem 1zu1 umzusetzen und das auch noch schön - brauchst einen der beiden Bs aus diesem Bereich.

Wobei es natürlich auch gefrickelt geht. - Aber im "B" Bereich frickelt es sich so schwer face-wink

wobei frickeln in meinen Augen bedeuten würde - erzeuge eine 2. Liste und anhand derer dann die "Zahlen" umdrehen und erst dann kopieren

Mit der obigen Abfrage hast du doch Dateiname und Erstellungsdatum.

Von daher wäre ein Lauf immer und immer wieder nicht notwendig - bzw sinnbefreit, wenn er öfters läuft und jemand zwischenzeitlich die datei geändert hätte - denn du fragst ja erstell nicht Änderungsdatum ab.

Von daher - denk bitte nochmal nach, ob dein Ziel wirklich den gewünschten Erfolg bietet.

Gruß
Member: Stebbone
Stebbone Jul 24, 2009 at 09:55:27 (UTC)
Goto Top
Die Dateien kommen automatisiert übers Netzwerk in den PC. Es wird sicherlich niemand die DAteien ändern. Es kommen jeden Tag neue dazu und mit der Batch würde ich einfach gerne erreichen dass diese in den entsprechenden Ordner archiviert werden. Und ebenso der jeweilige Jahres&Monats Ordner (zur Übersicht) erstellt werden sollte. dass die bereits kopierten dateien nicht nochmal kopiert werden werde ich zum schluss anderst realisieren viell. das archiv Bit checken oder so. Ich verstehe nicht ganz was du mit "B" Bereich meinst.
Ein anderer lösungsweg wäre viell. eine .log datei zu erzeugen:
viell: dir /b *_*>Files.log
so aber ich weiß nicht genau wie das alles funktioniert...hmmm
Mitglied: 60730
60730 Jul 24, 2009, updated at Oct 18, 2012 at 16:38:51 (UTC)
Goto Top
Zitat von @Stebbone:
Ich verstehe nicht ganz was du mit "B" Bereich meinst.
#Batch

und yupp -das Archiv bit wäre auch mein nächster Kandidat gewesen, wenn es "so" laufen muß.

Aber nochmal - ich mach das alles mit 7zip - da lege ich mir Erstelldatum des Zip-originalPfad.zip an und dort sind dann die Dateien drin.

guckst du

Gruß
Member: rubberman
rubberman Jul 24, 2009 at 10:51:55 (UTC)
Goto Top
Würde etwa so an die Sache ran gehen: (Ungetestet!)
@echo off & setlocal
set "Quelle=C:\SUBELKE\WIN-DFUE\EMPFANG.ARC"  
set "Archiv=C:\SUBELKE\WIN-DFUE\ARCHIV\EMPFANG.ARC"  

if not exist "%Archiv%" md "%Archiv%"  
pushd "%Quelle%"  
for /f "skip=5 tokens=1,3*" %%i in ('dir /a-d /tc *.*^|findstr /b /c:" " /v') do set "Xdate=%%i" &set "Xnameext=%%k" &set "Xname=%%~nk" &set "Xext=%%~xk" &call :sub  
popd


set "Quelle=C:\SUBELKE\WIN-DFUE\EMPFANG.HDR"  
set "Archiv=C:\SUBELKE\WIN-DFUE\ARCHIV\EMPFANG.HDR"  

if not exist "%Archiv%" md "%Archiv%"  
pushd "%Quelle%"  
for /f "skip=5 tokens=1,3*" %%i in ('dir /a-d /tc *.*^|findstr /b /c:" " /v') do set "Xdate=%%i" &set "Xnameext=%%k" &set "Xname=%%~nk" &set "Xext=%%~xk" &call :sub  
popd

pause
goto :eof

:sub
set "tt=%Xdate:~0,2%"  
set "mm=%Xdate:~3,2%"  
set "jjjj=%Xdate:~-4%"  
if not exist "%Archiv%\%jjjj%%mm%" md "%Archiv%\%jjjj%%mm%"  
copy "%Quelle%\%Xnameext%" "%Archiv%\%jjjj%%mm%\%Xname%_%jjjj%.%mm%.%tt%%Xext%">nul  
goto :eof

Behalte die Variablennamen Quelle und Archiv bei, um die Subroutine für beide Verzeichnisse zu nutzen. Übrigens: Erstellungsdatum mit Parameter /tc !

<edit> überflüssige "do"s und Apostrophe entfernt </edit>
Member: Stebbone
Stebbone Jul 24, 2009 at 11:02:08 (UTC)
Goto Top
wow sieht ja schon einmal ganz gut aus, vielen Dank, jedoch bringt er ein fehler bei dem do Befehl, werde dies versuchen zu lösen...
Member: rubberman
rubberman Jul 24, 2009 at 11:34:05 (UTC)
Goto Top
Ein Apostroph zu viel, ich ändere oben.
Member: Stebbone
Stebbone Jul 27, 2009 at 06:28:29 (UTC)
Goto Top
Das ist genau das was ich gesucht habe, vielen Dank hat mir sehr weitergeholfen! Gruß Stebbone