Batch erstellen für automatisierte Bearbeitung von Ordnern/Dateien

Hallo Gemeinde,

ich hoffe hier Hilfe für folgendes Problem zu finden. Zuvor kurz der Hinweis, dass ich schon etliche (ähnliche) Fragen im Netz studiert habe, meine Kenntnisse jedoch nicht ausreichen, die dort (mehr oder weniger) genannten Lösungen auf meine Bedürfnisse anzupassen.

also, here we go:

Ich möchte mit einer Batch Datei folgendes realisieren:

Auf einer Festplatte liegt folgende Struktur vor:

Hauptordner
  1. Unterordner
      2. Unterordner
           Datei1.XXX
           Datei2.XXX
           Datein.XXX
           Test-Datei1.XXX
           Test-Datein.XXX

wobei die Ordner jeweils in mehrfacher Ausführung vorhanden sind.

Ich möchte nun per Batch die 3.Ordnerebene (2.Unterordner) nach Dateien „Test-*.*“ durchsuchen und wenn diese Datei(en) vorhanden sind soll ein weiterer Unterordner „BEISPIEL“ erstellt werden.

Im Folgenden sollen die Dateien „Test.*.*“ in diese Unterordner verschoben werden.

Kann mir dabei bitte jemand weiterhelfen?

Danke!!

Bin mittlerweile so weit :smile:

@echo off
if exist Test*.* goto KOPIEREN
echo keine Datei mit „Test“ gefunden!
pause
goto ENDE

KOPIEREN

if not exist Beispiel md Beispiel
move Test*.* Beispiel
pause

ENDE

Eigentlich ganz einfach und funktioniert im jeweiligen Ordner.
Nun fehlt jedoch die komplette Steuerung um diese Batch vom Root der HDD aus in JEDEM vorhandenen 2.Unterordner auszuführen. Vielleicht mit einer For-Next Schleife? Aber wie navigiere ich in die jeweiligen Unterordner, die ja alle anders benannt sind?

Helft mal bitte!

Ich muss nochmal weiter berichten…
Wie ich an anderer Stelle gelesen habe ist ein Befehl wie „CD eine Ebene tiefer“ scheinbar nicht möglich. Mein Problem ist, dass die Hauptordner und 1.Unterordner-Ebene keine abhängige Benennung hat, wenn ich jedoch die Batchfile eine Ebene tiefer, auf der 2.Unterordner Ebene ausführe, könnte ich eine Jahreszahl *(%Jahr%) nutzen. Ich habe damit schon experimentiert und es läuft eigentlich, aber leider wird nur der erste Ordner einer Jahreszahl abgefragt und ggf. existierende weitere Ordner mit derselben Jahreszahl werden übersprungen…
Kann da wer helfen?

Hallo Honko,

if not exist Beispiel md Beispiel
move Test*.* Beispiel

nur mal so, quasi zu deiner Kenntnis, bei wichtigen Dateien würde ich so vorgehen aus Sicherheitsgründen.

if not exist Beispiel md Beispiel
xcopy Test*.* Beispiel
del Test*.*

Denn wenn bei, mitten, in deinem „Move“ der PC zusammenbricht o.ä. ist erstmal unklar ob es keine Dateiinhalte betroffen hat im worst case.
Meine Variante ist da einen Tick sicherer.
Ggfs. noch nach jeder Codezeile sone Codezeile einfügen
If Errorlevel… Goto x
Kann auch übertrieben sein, weiß grad nicht, lang her mit meinem Dos 3.3 :smile:

Was nicht schlecht ist alle Befehle so zu schreiben:

if not exist Beispiel md Beispiel >> C:\Reinhard\Kopier.log
xcopy Test*.* Beispiel >> C:\Reinhard\Kopier.log
del Test*.* >> C:\Reinhard\Kopier.log

Denn so eine Log-Datei ist schnell durchzucrollen und dir können Fehlermeldungen drinstehen die dir sonst entgangen wären. Das Move nicht klappte da die Datei grad von einem Programm im Gebrauch ist o.ä.

So, immerhin jetzt schon was zu deiner Batch :smile:
Du willst von einem Oberordner bis „runter“ in den dritten Ordner-Level. Mein erster Ansatz dazu wäre daß ich das mit drei For-Schleifen löse.

Rein prinzipiell so For-Schleifen

For /f „delims=- tokens=1-4“ %%i in (‚dir /b /a-d /s *-JJMM.xls‘) do echo %%i

Das mit Echo hinten kannste ja benutzen um zu prüfen ob der vordere Teil der For korrekt funktioniert. Mal angenommen die Batch stünde im Oberordner.

Um das Problem zu lösen muß das dann aber so aussehen:
For …) do Call Batch2.bat %%i

In Batch2.bat kannste dann über den mitgegebenen Parameter %%i auf die jeweiligen Unterordner erster Stufe zugreifen und mit der dritten For-Schleife bearbeiten, die dann in Batch3.bat steht.

Vielleicht mit einer For-Next Schleife? Aber wie
navigiere ich in die jeweiligen Unterordner, die ja alle
anders benannt sind?

Andere Namen sind weniger das Problem. Wichtiger ist ob die Ordnernamen eine Dateierweiterung haben. Wenn nicht ist besser, dann kann man nach *. suchen.

Ich kenne die neumodischen Dosbehle nicht so. Vielleicht gibt es mir unbekannte Befehle wie
If IsDir …
If filelength=0…

Zur Not kann man noch nach /nul fahnden. Ordner haben/hatten diesen Namen in sich, vllt. als unsichtbare Datei, k.A. Dateien nicht.

Gruß
Reinhard

Danke für Deine Hilfe Reinhard, auch für Deine Sicherheitstipps!

Eijeijei… ich seh schon, so einfach wirds wohl doch nicht (fühle mich leicht überfordert :wink:)

Vielleicht mal häppchenweise, wie stelle ich es denn an, dass jeder Ordner einer Ebene untersucht wird (ganz normale Windows Ordner ohne Suffix) wenn diese Ordner unterschiedliche Namen besitzen?

Danke!