winget
Goto Top

Mehrere und verschiedene Dateien von Ordner A in Ordner B verschieben

Suche Alternative zu "MOVE [/Y| /-Y] [Laufwerk:][Pfad]Datei1[,...] Ziel" um mehrere und verschiedene Dateien von Ordner A in den Ordner B zu verschieben.

Hallo Leute,
ich habe heute sagen wir 8000 Dateien von einem Ordner z.B. A in den Ordner B mit Hilfe von Move CMD Befehl verschoben.
Dafür habe ich in einer CMD-Datei 8000 Move Befehle eingegeben. Diese Befehle zu erstellen kosten mich nicht viel Zeit, aber das kann ich nicht einem normalen User anbieten/antun.

Was ich eigentlich suche ist, einen Befehl, der mir diese Dateien verschiebt. Die Datei-Namen (auch mit Pfad) befinden sich in einer Text-Datei.
Diese Dateinamen können auch in einer Exceltabelle oder Access-Datenbank stehen. Das ist kein Problem. Ich kann mir aber vorstellen, dass aus einer Text-Datei einfacher ist, einen Move-Befehl zu starten bzw. zu programmieren.
Die Dateien haben komplett verschiedene Namen. Ich kann also nicht mit dem Befehl alle was mit A anfängt oder mit B endet verschieben.

Danke schön für eure Vorschäge
Kommentar vom Moderator Biber am Jan 06, 2011 um 18:00:02 Uhr
Auf "Hinreichend beantwortet" gesetzt und von "Windows vielleicht" nach "Batch & Shell" verschoben.

Content-Key: 158072

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

Printed on: April 19, 2024 at 04:04 o'clock

Member: bastla
bastla Jan 05, 2011 at 21:48:11 (UTC)
Goto Top
Hallo winget!

Bei einer derartig exakten Beschreibung möchte ich natürlich auch nicht knausern face-wink:
Erstelle die Ordnerstruktur unterhalb von B mit "xcopy /t" und verschiebe die Dateien unter Verwendung einer "for /f"-Schleife ...

Als Alternative zu "xcopy /t" kannst Du auch für jede Datei den Zielpfad vorweg ermitteln und bei Bedarf erstellen.

Grüße
bastla
Member: winget
winget Jan 05, 2011 at 22:20:30 (UTC)
Goto Top
Hallo bastla,
das finde ich Interessant.

Ich hätte mehr an so was gedacht:

xcopy c:\Quellordner c:\Zielordner /S/E /EXCLUDE:C:\nichtKopieren.txt

nur dann für xmove und nicht als Excluede:
z.B.

xmove c:\Quellordner c:\Zielordner /S/E / c:\DateienzuKopieren.txt
oder
xmove c:\Quellordner c:\Zielordner /S/E / c:\xmove.out

Vielen Dank schon mal
Member: bastla
bastla Jan 05, 2011 at 22:28:16 (UTC)
Goto Top
Hallo winget!

Da es zum Einen kein "/INCLUDE" für "xcopy" und zum Anderen für "move" keine Option zum Erstellen des Zielpfades gibt, musst Du Dir vermutlich eher so behelfen:
@echo off & setlocal
set "Basis=D:\OrdnerA"  
set "Ziel=D:\Anderer Ordner\Unterordner\OrdnerB"  
set "Liste=D:\Dateiliste.txt"  

::xcopy /t "%Basis%" "%Ziel%\" 
for /f "usebackq delims=" %%i in ("%Liste%") do set "Pfad=%%~dpi" & call :ProcessFile "%%i"  
pause
goto :eof

:ProcessFile
call set "ZielPfad=%Ziel%%%Pfad:%Basis%=%%"  
echo md "%ZielPfad%" 2>nul  
echo move %1 "%ZielPfad%"  
goto :eof
Es sind hier beide Varianten kombiniert - daher entweder die Zeile 6 auskommentiert belassen oder alternativ die Zeile 13 "lahm" legen.

Durch das "echo" am Beginn der Zeilen 13 und 14 wird vorerst die Verarbeitung durch Ausgabe des Befehles nur simuliert (deswegen auch der ansonsten unnötige "pause"-Befehl in Zeile 8 am Ende des "Hauptprogrammes") ...

Vorausgesetzt habe ich, dass in der "Dateiliste.txt" alle Quelldateien mit vollständigem Pfad - also etwa als Ergebnis eines
dir /s /b /a-d D:\OrdnerA\*.doc* D:\OrdnerA\*.xl* >D:\Dateiliste.txt
- stehen und natürlich, dass die Ordnerstruktur im Ziel erhalten bleiben soll (beides ging dann leider doch nicht so genau aus Deiner Darstellung hervor) ...

Grüße
bastla
Member: micneu
micneu Jan 06, 2011 at 10:54:23 (UTC)
Goto Top
kannst du auch powershell nehmen, macht sowas von haus aus face-smile
wie ist die text datei aufgebaut, wie csv?
mach mal ein beispiel für einige zeilen.
könnte dir dann ziemlich zeitnah eine powershell lösung geben.

gruß michael

ps: frohes neues euch allen
Member: winget
winget Jan 06, 2011 at 11:46:02 (UTC)
Goto Top
Hallo micneu (Michael),
die Text-Datei kann auch als csv gespeichert werden. Das ist kein Problem.
Die Text-Datei kann ich komplett mit Pfad eingeben oder nur einfach die Dateinamen.

Beispiele für die Text Datei mit komplettem Pfad; Name der Datei Dateien_zu_Verschieben.txt (als Beispiel)
D:\Quellordner\Testdatei1.pdf
D:\Quellordner\Testdatei2.xls
D:\Quellordner\Testdatei3.doc

etc..

Die Text-Datei befindet sich z.B. unter D:
D:\Dateien_zu_Verschieben.txt
Member: winget
winget Jan 06, 2011 at 13:14:59 (UTC)
Goto Top
Hallo bastla,
es sieht schon mal gut aus.
Ich bekomme auch die Meldung, was verschoben werden muss oder wird in einer DOS fenster.

Die Meldung sieht wie folgt aus:

move "D:\Quellordner\Beispieldatei.pdf" "D:\Zielordner\"
Drücken Sie eine beliebige Taste...

Natürlich die alle andere Dateien auch dazwischen.

Problem ist, diese Dateien werden gar nicht verschoben. Die Ordner sind weder Schreibgeschützt oder sonst was. Mit einem einfachen move Befehl oder xcopy funtioniert.

Die Dateiliste enhält den kopletten Pfad. Wie z.B.
D:\Quellordner\Testdatei1.pdf
D:\Quellordner\Testdatei2.xls
D:\Quellordner\Testdatei3.doc

Genaus so wie man mit einem Befehl
dir /s /b /a-d D:\OrdnerA\*.doc* D:\OrdnerA\*.xl* >D:\Dateiliste.txt
erstellt werden.

Gruß
winget
Member: bastla
bastla Jan 06, 2011 at 14:19:44 (UTC)
Goto Top
Hallo winget!

War ja auch nur zum Testen - um mich mal selbst zu zitieren face-wink:
Durch das "echo" am Beginn der Zeilen 13 und 14 wird vorerst die Verarbeitung durch Ausgabe des Befehles nur simuliert (deswegen auch der ansonsten unnötige "pause"-Befehl in Zeile 8 am Ende des "Hauptprogrammes") ...
Wenn Du also willst, dass tatsächlich etwas passiert, diese beiden "echo"-Befehle einfach entfernen ...

Falls übrigens wirklich nur Dateien aus dem Quellordner (und nicht auch aus Unterordnern - darauf hatte ich wegen
Die Datei-Namen (auch mit Pfad) befinden sich in einer Text-Datei.
getippt) verschoben werden sollen, ginge das Ganze natürlich noch einfacher (nochmals mit dem "Sicherheits-echo" vor dem "move"):
@echo off & setlocal
set "Ziel=D:\Zielordner"  
set "Liste=D:\Dateien_zu_Verschieben.txt"  

for /f "usebackq delims=" %%i in ("%Liste%") do echo move "%%i" "%Ziel%"  
pause
goto :eof
Hier wird unterstellt, dass die Liste wie oben beschrieben aussieht, aber alle Dateien im selben Pfad "D:\Quellordner" liegen - wäre dem nicht so, würden ev gleichnamige Dateien im Zielordner ohne Rückfrage überschrieben!

Grüße
bastla
Member: winget
winget Jan 06, 2011 at 15:21:40 (UTC)
Goto Top
Hallo bastla,
Super! Klar, wer lesen kann, ist klar im Vorteil.
Beide Batche funktionieren.
Genau das habe ich gesucht.
Vielen Dank
Member: winget
winget Jan 06, 2011 at 15:27:59 (UTC)
Goto Top
Hallo mineus,
die Lösung (als CMD Batch) von bastla liegt jezt vor und funtionert.
Ich wäre aber neugierig, wie du als powershell lösen würdest. Deswegen lasse ich diese Anfrage noch bis Wochenende offen.
Danke schon mal im Voraus
Gruß
winget