net-agent
Goto Top

Rekursives kopieren und umbenennen von Dateien in neu anzulegenden Ordner

Problem: Datensicherung eines Unix-Mailservers im mdir-Format unter Windows einlesen.

Hallo Leute, ich hoffe ihr könnt mir helfen.

Zur Situation: Ich habe hier eine Ordnerstruktur, die den Mailverkehr eines Unix-Mailservers beinhaltet. Die Daten wurden exportiert und sehen etwa wie folgt aus

Für jeden benutzer gibt es ein Accountverzeichnis. Innerhalb dieses Verzeichnisses sind nun mehrere Unterverzeichnisse vorhanden, ähnlich wie
man es auch aus Outlook kennt (Inbox, Archiv etc. Aber auch vom User selbs angelegte Strukturen).

In den Ordnern befinden sich nun die eigentliche E-Mails mit unterschiedlichen Dateinamen und ohne Dateierweiterung.
hängt man an eine solche Maildatei nun eine Erweiterung .eml an, so lässt sich die jeweilige Datei mit Outlook öffnen.
Haken an der Sache ist nun, dass die originale Datei nicht verändert werden darf/soll.


Bisher habe ich es so gemacht, dass ich in jeden Ordner gewechselt bin un dort über Batch folgende Befehle ausgeführt habe:

mkdir \umbenannt
xcopy * \umbenannt\*.eml

Da mir der Rechner zwischenzeitlich abgeschmiert ist, sind teilweise bereits "umbenannt"-Ordner angelegt, teilweise nicht.
Um nicht noch einmal alles erneut von Hand durchgehen zu müssen, suche ich nach einer Batch-Lösung, die folgendes erfüllt:

Aufgabe: Ordnerstrucktur rekursiv durchgehen.
Wenn kein Verzeichnis "umbenannt" besteht, dieses anlegen, die Dateien aus dem jeweiligen Verzeichnis dorthin kopieren und die
Erweiterung .eml anhängen.

Alternative: Gesamte Ordnerstrucktur mit ausnahme der Verzeichnisse "umbenannt" in ein neus Verzeichnis kopieren und dabei die Erweiterung
.eml an jede vorhandene Datei anhängen.

Wäre toll, wenn Ihr mir hierzu eine Lösung anbieten könntet.

Content-Key: 179768

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

Printed on: April 18, 2024 at 03:04 o'clock

Member: bastla
bastla Jan 30, 2012 at 15:52:29 (UTC)
Goto Top
Hallo net-agent und willkommen im Forum!

Das könnte (ungetestet) etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Mail-Ordner"  
set "Neu=umbenannt"  

for /d /r "%Ordner%" %%i in (*) do (  
    if /i "%%~nxi" neq "%Neu%" if not exist "%%i\%Neu%" (  
        echo md "%%i\%Neu%"  
        echo copy "%%i\*" "%%i\%Neu%\*.eml"  
    )
)
pause
Wegen der beiden echo in den Zeilen 7 und 8 zeigt der Batch vorerst nur an, was passieren wird, wenn diese echo entfernt werden ...

Grüße
bastla
Member: net-agent
net-agent Jan 31, 2012 at 12:45:57 (UTC)
Goto Top
Hallo bastla,

zunächst mal herzlichen Dank für die superschnelle Antwort.

Dein Script funktioniert super. Respekt!

Wenn man weiß wie es gehen sollte ist das Meiste auch nachvollziebar. Allerdings kann ich mit der Variable "%%~nxi" nichts anfangen.

Wäre nett, wenn du das nochmal kurz erläutern könntest.

Ich werde die Frage trotzdem schonmal als gelöst markieren.


Nochmals Danke und beste Grüße...

net-agent
Member: bastla
bastla Jan 31, 2012 at 14:25:48 (UTC)
Goto Top
Hallo net-agent!
Allerdings kann ich mit der Variable "%%~nxi" nichts anfangen.
Ein intensiver Blick in die Online-Hilfe (for /?, ziemlich am Ende) sollte das eigentlich ändern ...

Grüße
bastla