spidi-25
Goto Top

Datei Verwaltung

Guten Tag allerseits

Ich habe mir vorgestellt per Batch Dateien Verwalten und zwar folgende,

es handelt sich um Folgende Dateien die sich immer in unterschiedlichen Ordnern und mit unterschiedlichen Namen befinden

z.B
5000_500_101_00.pdf
5000_500_102_00.pdf
5000_500_103_01.pdf
5000_500_104_00.pdf

5000_500_101_00.jpg
5000_500_102_00.jpg
5000_500_103_01.jpg
5000_500_104_00.jpg


ich habe mir folgendes vorgestellt

1. Dateinamen auslesen, Kürzen und Ordner erstellen, z.B. in Ordnernamen 5000_500 und alle Pdf´s rein kopieren mit Originalnamen.
2. Ordner z.B. 5000_500 Verschieben nach D:\PDF\ (dieser Pfad ist immer gleich) wenn Ordner schon vorhanden nur die Dateien rein kopieren.(ich glaube es geht automatisch wen Ordner schon vorhanden)
3. Wenn im Ordner z.B. D:\PDF\5000_500 es schon eine Datei mit dem Namen 5000_500_103_00 also älter als die 5000_500_103_01 gibt, dann einen Ordner alt erstellen und und die Datei 5000_500_103_00 in den Ordner alt verschieben.


Danach das gleiche mit .jpg machen, nur das hier das Zielverzeichnis D:\jpg\ heist


Ich bedanke mich im Voraus

P.S. Frohe Ostern wünsche ich euch allen.

Content-Key: 139800

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

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

Member: AndreasBrecht
AndreasBrecht Apr 03, 2010 at 13:26:47 (UTC)
Goto Top
Ich bin halt was batches angeht nicht so der Technische, aber ich würde jetzt einfach erstmal mit dem FilesystemObject die Dateien auflisten. Die Info kann man in ein Array oder Recordset wegschreiben. Das geht man dann durch benennt um und verschiebt die Dateien und legt sich die ORdner an, wie man sie braucht.
Member: bastla
bastla Apr 03, 2010 at 15:32:26 (UTC)
Goto Top
Hallo Spidi-25!

Nun gut, hangeln wir uns von Thread zu Thread - oder möchtest Du ev einmal den gewünschten Gesamtablauf - zB mit Gegenüberstellung Ist- / Sollzustand - beschreiben?

@echo off & setlocal
set "Quelle=D:\Viele Dateien"  
set "Ziel=D:\"  

pushd "%Quelle%"  
for %%t in (PDF JPG) do (
    for /f %%i in ('dir /b /on /a-d *_*_*_*.%%t') do (  
        for /f "tokens=1-4 delims=_" %%a in ("%%~ni") do (  
            md "%Ziel%%%a_%%b\alt" 2>nul  
            copy "%%i" "%Ziel%%%a_%%b\">nul  
            for /f "skip=1 delims=" %%x in ('dir /b /o-n /a-d "%Ziel%%%a_%%b\%%a_%%b_%%c_*%%~xi"') do move "%Ziel%%%a_%%b\%%x" "%Ziel%%%a_%%b\alt\"  
        )
    )
)
popd
Vorausgesetzt habe ich, dass es keine Namenskollisionen gibt (also zB Dateien mit dem Namen "5000_500_103_01.pdf" nicht sowohl im "Quell-" als auch im "Ziel-" oder "Ziel\alt"-Ordner existieren).

Zusätzlich ist bei der Angabe des Zieles der Pfad immer mit abschließendem "\" zu schreiben (also wenn nicht nach "D:\PDF\...", sondern nach "D:\Archiv\PDF\..." kopiert werden soll, müsste in Zeile 3 als Zielpfad "D:\Archiv\" angegeben sein), während der Quellpfad keinen "\" am Ende haben darf.

Grüße
bastla
Member: Spidi-25
Spidi-25 Apr 03, 2010 at 21:49:37 (UTC)
Goto Top
Hallo bastla

danke für die schnellen antworten, ich sehe du hast die Code´s voll im Griff
ich habe erst mal nur die 3 Thread´s, wen das alles funktioniert bin ich schon mal zufrieden!
Außer dem hast du schon zu einem Thread eine für mich passende Antwort geliefert, danke noch mal.

Zur diesem Thread
in der Zeile 2 steht Quelle=D:\ verstehe ich das richtig das der Code von dem Laufwerk D:\ ausgeht? Die Dateien befinden sich aber manchmal im Laufwerk V:\ manchmal im Laufwerk K:\ wie es bei einer Firma vorkommt verschiedene Laufwerke.

Zu der Aussage (Vorausgesetzt habe ich, dass es keine Namenskollisionen gibt (also zB Dateien mit dem Namen "5000_500_103_01.pdf" nicht sowohl im "Quell-" als auch im "Ziel-" oder "Ziel\alt"-Ordner existieren).
gibt es keine Möglichkeit wenn die Datei 5000_500_103_01.pdf im "Quell-" als auch im "Ziel-" oder "Ziel\alt"-Ordner existieren eine abfrage überschreiben einzubauen?
Member: bastla
bastla Apr 03, 2010 at 22:03:59 (UTC)
Goto Top
Hallo Spidi-25!
in der Zeile 2 steht Quelle=D:\ verstehe ich das richtig das der Code von dem Laufwerk D:\ ausgeht?
Ja.
Die Dateien befinden sich aber manchmal im Laufwerk V:\ manchmal im Laufwerk K:\ wie es bei einer Firma vorkommt verschiedene Laufwerke.
Wenn Du weißt, wie sich das Laufwerk feststellen lässt, sollte es kein Problem sein, das im Batch zu berücksichtigen ...
gibt es keine Möglichkeit wenn die Datei 5000_500_103_01.pdf im "Quell-" als auch im "Ziel-" oder "Ziel\alt"-Ordner existieren eine abfrage überschreiben einzubauen?
Eine derartige Abfrage widerspricht eigentlich dem Sinn eines Batches, nämlich einen automatisierten Ablauf zu ermöglichen - zu realisieren wäre es zwar mit dem Schalter "/-y" für den "copy"- und den "move"-Befehl, besser wäre aber eine Strategie, die eine automatische Behandlung erlaubt - und wenn nur in Form eines Logs, das die nicht kopierten / verschobenen Dateien festhält.

Grüße
bastla
Member: Spidi-25
Spidi-25 Apr 03, 2010 at 22:35:37 (UTC)
Goto Top
Wenn Du weißt, wie sich das Laufwerk feststellen lässt, sollte es kein Problem sein, das im Batch zu berücksichtigen ...
nein weiß ich leider nicht bin ein Anfänger in diesem Bereich.


Eine derartige Abfrage widerspricht eigentlich dem Sinn eines Batches, nämlich einen automatisierten Ablauf zu ermöglichen - zu realisieren wäre es zwar mit dem Schalter "/-y" für den "copy"- und den "move"-Befehl, besser wäre aber eine Strategie, die eine automatische Behandlung erlaubt - und wenn nur in Form eines Logs, das die nicht kopierten / verschobenen Dateien festhält.

gibt es eine Möglichkeit wenn sich keine Datei im "Ziel-" oder "Ziel\alt"-Ordner befindet automatische Durchführung. Wenn aber schon vorhanden dann nachfragen, kommt normalerweise nicht vor das die Dateien vorhanden sind, aber ich habe noch Kollegen die Vielleicht eine oder die andere Datei abgelegt haben.
Member: bastla
bastla Apr 03, 2010 at 22:59:25 (UTC)
Goto Top
Hallo Spidi-25!
gibt es eine Möglichkeit wenn sich keine Datei im "Ziel-" oder "Ziel\alt"-Ordner befindet automatische Durchführung
Das passiert ohnehin ...
Wenn aber schon vorhanden dann nachfragen
Wie schon erwähnt, kann jeweils durch ein "copy /-y ..." bzw "move /-y ..." gefragt werden, ob eine gleichnamige Zieldatei überschrieben werden soll - allerdings erscheint mir das nicht wirklich sinnvoll, denn: Was soll denn bei einer Antwort "nein" weiter passieren?

Grüße
bastla
Member: Spidi-25
Spidi-25 Apr 03, 2010 at 23:15:10 (UTC)
Goto Top
Die Dateien im Quell Ordner belassen bzw. das so automatisieren das die schon vorhandenen Dateien im Quellordner bleiben, den dann weiß ich das ich nachschauen muss.

wie Sieht es mit der 2 Zeile aus? Was muss da geändert werden?
Member: bastla
bastla Apr 03, 2010 at 23:24:12 (UTC)
Goto Top
Hallo Spidi-25!

Nach bisherigem Stand bleiben alle Dateien im Quellordner - es soll ja kopiert werden ...
wie Sieht es mit der 2 Zeile aus? Was muss da geändert werden?
Leider verstehe ich Deine Frage nicht - in dieser Zeile kannst Du den "Quell"-Pfad (aus dem die Dateien - nach derzeitigem Stand - kopiert werden sollen) eintragen (und nur eben nicht am Ende einen "\" schreiben) ...

Grüße
bastla
Member: Biber
Biber Apr 03, 2010 at 23:51:38 (UTC)
Goto Top
...und noch mal, Spidi-25,

ergänzend zu bastla, die Behauptung : So wird das nix.

Es gab mal weiter oben folgende Plauderei zwischen euch:

[Spidi-25:] Die Dateien befinden sich aber manchmal im Laufwerk V:\ manchmal im Laufwerk K:\ wie es bei einer Firma vorkommt verschiedene Laufwerke.
[bastla] Wenn Du weißt, wie sich das Laufwerk feststellen lässt, sollte es kein Problem sein, das im Batch zu berücksichtigen ..
[Spidi-25] nein weiß ich leider nicht bin ein Anfänger in diesem Bereich.

Das ist einer der rund 25 Momente in deinen momentan offenen Beiträgen, in denen ich als unbefangener Mitleser ins Essen brechen möchte, aber als hilfsbereiter Moderator versuche zu übersetzen.

Hey, Spidi-25, der liebe bastla wollte dir sagen: Bevor irgendetwas automatisiert werden kann, sollte es organisatorisch geregelt und definiert sein.
"Batch" bedeutet: Es wird ein ohnehin vorhandener Arbeitsprozess an den Stellen etwas schneller gemacht, wo sich Abläufe wiederholen und reproduzierbar eintreten.
Oder aber es wird durch einen Batch-Prozess ein neuer "zwingender" Ablauf etabliert.

Und solange es in deiner Welt so ist, dass es mal Laufwerk K: und mal aber V: sein kann (und keiner weiß es, wenn der Batch gestartet wird) oder wenn es "aber Kollegen gibt, die es ein bisschen anders machen", solange brauchst du weder Skript-Handwerker noch Script-Künstler um irgendwelche Teil-Feinheiten in den Ornamenten um Rat ersuchen.

Vergiss einen Moment, dass es Batches und VB-Script und Turbo-X++ gibt. Kommt im nächsten Schritt.
Definiere erst mal einen eindeutigen, verbindlichen, reproduzierbaren Prozess mit EINEM Startpunkt, in dem alle realistisch zu erwarteten Fälle berücksichtigt und zu einem gesteuerten Abschluss geführt werden.

Grüße
Biber
Member: Spidi-25
Spidi-25 Apr 03, 2010 at 23:51:59 (UTC)
Goto Top
Nach bisherigem Stand bleiben alle Dateien im Quellordner - es soll ja kopiert werden ...
wie gesagt es kommt nur vor wen ein Kollege die Daten schon abgelegt hat. dann sollen die Daten nicht verschoben werden bzw. nur die die es im Zielverzeichnis nicht gibt.

Leider verstehe ich Deine Frage nicht - in dieser Zeile kannst Du den "Quell"-Pfad (aus dem die Dateien - nach
derzeitigem Stand - kopiert werden sollen) eintragen (und nur eben nicht am Ende einen "\" schreiben)

wenn ich ein festen Quellpfad habe, dann muss ich mir mehrere cmd dateien anlegen, eins für V: eins für K:. Den ich möchte nicht wenn ich Daten von V: ablege und in einer Stunde von K: die CMD umschreiben, kann man das nicht umgehen?

noch eine frage zur Zeile 2 angenommen die Daten Befinden sich auf V:\Technik\ Holz 10 Dateien im Ordner Holz
V:\Technik\Metall 5 Dateien im Ordner Metall und ich mich mit dem Commander in dem Ordner Metall befinde werden die Dateien Kopiert oder muss der genaue Pfad V:\Technik\Metall angegeben werden oder reicht nur Quelle=V:\
Member: Spidi-25
Spidi-25 Apr 04, 2010 at 00:23:24 (UTC)
Goto Top
Also ich fange von vorne an

Also es kommt ein Auftrag ins Haus, es wird eine Auftragsnummer angelegt und es sieht folgender maßen aus.


V:\Zeichnung\5000_Kunde("5000 und Kunde"Variabel)\5000_500_Biegen\jetzt kommen zum BSP. oben genannte Dateien als .cat, durch eine CMD Skript Befehl werden .PDF´s und .DXF dateien erzeugt.

die PDF`s werden dann manuell nach D:\Fertig\PDF\5000_50 in den ordner 5000_50 Kopiert
die DXF werden dann manuell nach D:\Fertig\DXF\5000_50 in den ordner 5000_50 Kopiert
wenn alles fertig ist

und wenn es eine Änderung gibt wird die geänderte Datei z.B. als 5000_500_103_01.cat gespeichert und in unterordner z.B. V:\Zeichnung\5000_Kunde("5000 und Kunde"Variabel)\5000_500_Biegen\test kopiert, damit nur von der neue Datei .pdf und . DXF durch den CMD Skript Befehl erzeugt werden.

Danch wird die Datei 5000_500_103_01 in das Verzeichnis D:\Fertig\DXF\5000_50 in den ordner 5000_50 Kopiert und die 5000_500_103_00 in den Ordner D:\Fertig\DXF\5000_50\alt

ich hoffe jetzt werdet ihr mich verstehen.
Member: Spidi-25
Spidi-25 Apr 04, 2010 at 11:05:45 (UTC)
Goto Top
Hallo bastla

es tut mir Leid der Code funktioniert doch 1a vielen vielen Dank, hast mir super geholfen Wahnsinn!!!

es war mein Fehler, habe beim einfügen was vergessen und dann hat mich noch die

02 Zeile set "Quelle=D:\Viele Dateien" verirrt


habe es wie folgt gemacht und den Code leicht verändert sieh unten.

den Code in eine ("Ablge.cmd Dateinamen") Datei abgespeichert und die Datei nach C:\Windows kopiert.
Dann öffne ich meinen Filecommander gehe in z.B. V:\Zeichnung\5000_Kunde("5000 und Kunde"Variabel)\5000_500_Biegen Ordner, und tippe unten in die Kommandozeile von dem Filecommander Ablage und Sieh da die Daten sind wie gewünscht, die PDF´s sind im Laufwerk D:\PDF\ und die DXF´s sind in D:\DXF\

und das egal in welchem Laufwerk sich die Daten befinden Hammer Geil.
Ob wohl ich die 2 Zeile immer noch nicht verstehe, das ist mir aber egal es läuft wie gewünscht und das ist wichtig!

Vielen vielen dank noch mal.


@echo off & setlocal 
set "set "Quelle=D:\Viele Dateien"   
set "Ziel=D:\PDF\"   

pushd "%Quelle%"   
for %%t in (PDF) do ( 
    for /f %%i in ('dir /b /on /a-d *_*_*_*.%%t') do (   

        for /f "tokens=1-4 delims=_" %%a in ("%%~ni") do (   
            md "%Ziel%%%a_%%b\alt" 2>nul   
            copy "%%i" "%Ziel%%%a_%%b\">nul   
            for /f "skip=1 delims=" %%x in ('dir /b /o-n /a-d "%Ziel%%%a_%%b\%%a_%%b_%%c_*%%~xi"') do move "%Ziel%%%a_%%b\%%x" "%Ziel%%%a_%%b\alt\"   
        ) 
    ) 
) 
@echo off & setlocal 
set "set "Quelle=D:\Viele Dateien"   
set "Ziel=D:\DXF\"   

pushd "%Quelle%"   
for %%t in (DXF) do ( 
    for /f %%i in ('dir /b /on /a-d *_*_*_*.%%t') do (   

        for /f "tokens=1-4 delims=_" %%a in ("%%~ni") do (   
            md "%Ziel%%%a_%%b\alt" 2>nul   
            copy "%%i" "%Ziel%%%a_%%b\">nul   
            for /f "skip=1 delims=" %%x in ('dir /b /o-n /a-d "%Ziel%%%a_%%b\%%a_%%b_%%c_*%%~xi"') do move "%Ziel%%%a_%%b\%%x" "%Ziel%%%a_%%b\alt\"   
        ) 
    ) 
) 
popd  

[Edit Biber] CodetaX nachgezogen, [/Edit]
Member: bastla
bastla Apr 04, 2010 at 11:54:34 (UTC)
Goto Top
Hallo Spidi-25!

Wenn Du von Anfang an klar gestellt hättest, dass Du den Batch immer aus dem "Quell"-Ordner heraus startest (über Deinen "Filecommander") hätten wir uns die Zeile 2 (und auch die Zeile 5) sparen können - daher einfach weg damit (besonders, da die Zeile 2 in der jetzigen Form ohnehin keinen Sinn hat).

Grüße
bastla
Member: Spidi-25
Spidi-25 Apr 04, 2010 at 12:09:02 (UTC)
Goto Top
Alles klar erledigt und es läuft Prima!!!

THX