photographix
Goto Top

Dateien mit Unterstruktur verschieben

Hallo Leute,

folgendes Problem habe ich aktuell:

Wir besitzen eine großes Storrage mit ca. 7TB an Dateien.

Von dort sollen jetzt Dateien auf ein anderes (billiges) Storrage verschoben werden.
Dateien die in Bestimmten Ordnern liegen.
Das Konzept sieht später eine "automatische Reinigung" vor.

Glücklicher weise haben wir die Ordner schon passend benannt:

E:\Firma\Dokumente\2103\2010\2010-01\2010-01-15\Subordner\Subordner\*.*

Ich benötige nun eine "Logik" die es mir ermöglicht entweder ab Ordner 2010 oder 2010-01 oder 2010-01-15 alles zu verschieben.

Mit Robocopy kann ich keine Ordnerliste verarbeiten.
Zumindest habe ich es nur geschafft Ordner wegzulassen aber nicht ausschließlich nur bestimmte Ordner einer Struktur zu verschieben...

Mit folgendem Code von Bastla habe ich mich schon beschäftigt

@echo off & setlocal
set "Liste=D:\Liste.txt"  
set "Archiv=D:\Verschobene Dateien"  
set "Fehler=D:\Errors.txt"  

if exist "%Fehler%" del "%Fehler%"  
for /f "usebackq delims=" %%i in ("%Liste%") do md "%Archiv%%%~pi" 2>nul & move "%%i" "%Archiv%%%~pnxi" || echo %%i>>"%Fehler%"  

dieser funktioniert sehr gut wenn ich alle Dateien in allen Ordnern erfasse.
eine txt Datei über 7TB Inhalt mit jeder Datei zu erstellen ist aber sehr aufwändig.

Leider habe ich momentan keinen Ansatz mehr da ich mich mit Schleifen und Batch nicht auskenne.

PS: im Totalcommander kann ich zwar nach Ordner "Pattern" filtern - dort kann ich aber nicht die gesamte Struktur mit dem Ordner kopieren sondern immer nur den Ordner...

Vielleicht hat ja jemand eine Idee.

LG

Content-ID: 144474

Url: https://administrator.de/forum/dateien-mit-unterstruktur-verschieben-144474.html

Ausgedruckt am: 23.12.2024 um 10:12 Uhr

bastla
bastla 09.06.2010 um 14:07:50 Uhr
Goto Top
Hallo photografix!

Wie wäre es mit einem
subst X: "E:\Firma\Dokumente\2103\2010"
Grüße
bastla
SamvanRatt
SamvanRatt 09.06.2010 um 14:12:46 Uhr
Goto Top
Hi
wie wäre es mit regulären Ausdrücken (für Totalcommander)?
Robocopy kommt damit auch sicher klar, sofern du placeholder nutzt wie
E:\Firma\Dokumente \2103\????\????-??\????-??-???\
Deine Ordnung kennst du natürlich am besten. Da du wohl an Windows gefesselt bist (mit SAMFS kennst du solche Probleme nicht da du Dateien nach mehrere Kriterein automatisch auf andere (billiger+langsamere) Bereiche verschoben wird ohne dein Zutun; du hast dann nur noch ein System welches alte(=migrierte) Daten einfach langsamer gibt als topaktuelle.
Gruß
Sam
photographix
photographix 09.06.2010 um 14:13:48 Uhr
Goto Top
Hmm..

wäre eine Idee.
Da ich aber den Ordner 2103 nicht genau kenne - könne auch 2345 oder 7784 oder 4582 heißen wird das schwierig.
Von diesen "Überordnern" habe ich ca 500 Stück.
photographix
photographix 09.06.2010 um 14:16:14 Uhr
Goto Top
Hallo SamvanRatt,

das SAMFS klingt sehr cool.
Mal sehen ob ich mich im Sommerloch damit beschäftigen kann.
bastla
bastla 09.06.2010 um 14:21:58 Uhr
Goto Top
Hallo photographix!

Dann (ungetestet) etwa so:
@echo off & setlocal
set "Quelle=E:\Firma\Dokumente"  
set "Archiv=D:\Verschobene Dateien"  
set "Kennung=2010"  

for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" (  
    md "%Archiv%%%~pi%Kennung%" 2>nul  
    echo move "%%i\%Kennung%" "%Archiv%%%~pi%Kennung%" || echo %%i>>"%Fehler%"  
)
Das "echo" steht nur zum gefahrlosen Testen drin ...

Grüße
bastla
photographix
photographix 09.06.2010 um 14:40:31 Uhr
Goto Top
@ Bastla TRAUMHAFT
wie lange muss man sich mit Batch beschäftigen damit man so etwas, wie du schreibst "ungetestet, hinbekommt...

Lässt sich das noch etwas tunen?

move "Z:\\101\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\102\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\105\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\106\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\106_EA\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\107\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\108\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\110\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\1101\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\1102\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\112\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\113\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\116\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\118\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\1203\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\1204\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\1205\2010\2010-01" "D:\neu\2010\2010-01"   
move "Z:\\1206\2010\2010-01" "D:\neu\2010\2010-01"   

ich würde gern wollen das der "Überordner" auch mit erstellt wird
bastla
bastla 09.06.2010 um 15:04:37 Uhr
Goto Top
Hallo photographix!

So sollte das besser gehen:
for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" (  
    md "%Archiv%%%~pnxi" 2>nul  
    move "%%i\%Kennung%" "%Archiv%%%~pnxi" || >>"%Fehler%" echo %%i\%Kennung%  
)
Grüße
bastla
photographix
photographix 09.06.2010 um 15:10:13 Uhr
Goto Top
Hiho Bastla,

jetzt gehts aber nicht mehr...

Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.
Zugriff verweigert
Das System kann den angegebenen Pfad nicht finden.

Edit:

Die Überordner werden erstellt aber ohne die Unterordner und den Rest

move "z:\2103\2010\2010-01" "D:\neu\2103"   
move "z:\2104\2010\2010-01" "D:\neu\2104"   
move "z:\2105\2010\2010-01" "D:\neu\2105"   
move "z:\2106\2010\2010-01" "D:\neu\2106"   
move "z:\2107\2010\2010-01" "D:\neu\2107"   
move "z:\2108\2010\2010-01" "D:\neu\2108"   
move "z:\2201\2010\2010-01" "D:\neu\2201"   
move "z:\2301\2010\2010-01" "D:\neu\2301"   

mit "echo" in der Version geht es (+\%Kennung%)

for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" (  
    md "%Archiv%%%~pnxi" 2>nul  
    move "%%i\%Kennung%" "%Archiv%%%~pnxi\%Kennung%" || >>"%Fehler%" echo %%i\%Kennung%  
)

leider nicht mit move

Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
        0 Datei(en) verschoben.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
        0 Datei(en) verschoben.
Das System kann den angegebenen Pfad nicht finden.
Das System kann den angegebenen Pfad nicht finden.
        0 Datei(en) verschoben.
bastla
bastla 09.06.2010 um 15:27:42 Uhr
Goto Top
Hallo photographix!

"E:\Firma\Dokumente\" hast Du offensichtlich durch "Z:\" ersetzt, und "D:\Verschobene Dateien" ist zu "D:\neu" geworden; könntest Du daher bitte den gesamten Batch posten?

Grüße
bastla
photographix
photographix 09.06.2010 um 15:33:39 Uhr
Goto Top
Ja kann ich gern machen

@echo off & setlocal
set "Quelle=z:"  
set "Archiv=D:\neu"  <- Testordner  
set "Kennung=2010\2010-01"  

for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Kennung%" (  
    md "%Archiv%%%~pnxi" 2>nul  
    echo move "%%i\%Kennung%" "%Archiv%%%~pnxi\%Kennung%" || >>"%Fehler%" echo %%i\%Kennung%  
)

dieser Teil mit Echo funktioniert zumindest laut Debug Log
Nur wenn ich das echo entferne geht es nicht mehr
bastla
bastla 09.06.2010 um 15:50:40 Uhr
Goto Top
Hallo photographix!

Da Du (anders als in meinem Ansatz) als Kennung einen Ordner mit Unterordner verwendest, ergibt sich daraus das Problem, dass am Ziel der Teilpfad "2010" noch fehlt - daher ein Versuch mit expliziter Angabe der beiden Pfade:
@echo off & setlocal
set "Quelle=z:"  
set "Archiv=D:\neu"  <- Testordner  
set "Jahr=2010"  
set "Monat=2010-01"  

for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Jahr%\%Monat%" (  
    md "%Archiv%%%~pnxi\%Jahr%" 2>nul  
    move "%%i\%Jahr%\%Monat%" "%Archiv%%%~pnxi\%Jahr%" || >>"%Fehler%" echo %%i\%Jahr%\%Monat%  
)
Grüße
bastla
photographix
photographix 09.06.2010 um 15:56:57 Uhr
Goto Top
Danke für deine Geduld face-wink

also mit echo geht es ohne echo nicht
leider kann ich nicht ausmachen wo der Fehler ist.

Z: ist ein Netzlaufwerk
D: ist lokal
Rechte sind auf "Jeder alles" eingestellt

Die Überordner + 2010 wird ohne Probleme erstellt
also der Teil

md "%Archiv%%%~pnxi\%Jahr%" 2>nul  

im move Teil ist wohl das Problem zu suchen
bastla
bastla 09.06.2010 um 16:07:47 Uhr
Goto Top
Hallo photographix!

Wie sieht denn jetzt die Fehlermeldung aus?

Eigentlich sollte unter Batch das Verschieben auf andere Partitionen / Laufwerke möglich sein, aber zur Not ließe sich das ja auch aufteilen:
@echo off & setlocal
set "Quelle=z:"  
set "Archiv=D:\neu"  
set "Jahr=2010"  
set "Monat=2010-01"  

for /d %%i in ("%Quelle%\*.*") do if exist "%%i\%Jahr%\%Monat%" (  
    xcopy /e "%%i\%Jahr%\%Monat%" "%Archiv%%%~pnxi\%Jahr%\%Monat%\" || >>"%Fehler%" echo %%i\%Jahr%\%Monat%  
    rd /s /q "%%i\%Jahr%\%Monat%"  
)
(Jetzt könnten %Jahr% und %Monat% wieder in einer Variablen zusammengefasst werden).

Grüße
bastla
photographix
photographix 09.06.2010 um 16:13:42 Uhr
Goto Top
Hiho und ein fettes DANKE in der Hitze!,

woran es auch immer lag
mit der xcopy Version geht es problemlos!!

LG und nochmals Danke
SamvanRatt
SamvanRatt 09.06.2010 um 18:07:56 Uhr
Goto Top
Hi
SamFS auf ZFS ist wirklich perfekt; da gibt es bereits einige Ansätze dazu. Ein HP EVA System kann da auch nicht viel mehr und kostet dann rund 100 mal mehr/GB.
Gruß
Sam