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 06.01.2011 um 19:00:02 Uhr
Auf "Hinreichend beantwortet" gesetzt und von "Windows vielleicht" nach "Batch & Shell" verschoben.

Content-Key: 158072

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

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: bastla
bastla 05.01.2011 um 22:48:11 Uhr
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
Mitglied: winget
winget 05.01.2011 um 23:20:30 Uhr
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
Mitglied: bastla
bastla 05.01.2011 um 23:28:16 Uhr
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
Mitglied: micneu
micneu 06.01.2011 um 11:54:23 Uhr
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
Mitglied: winget
winget 06.01.2011 um 12:46:02 Uhr
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
Mitglied: winget
winget 06.01.2011 um 14:14:59 Uhr
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
Mitglied: bastla
bastla 06.01.2011 um 15:19:44 Uhr
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
Mitglied: winget
winget 06.01.2011 um 16:21:40 Uhr
Goto Top
Hallo bastla,
Super! Klar, wer lesen kann, ist klar im Vorteil.
Beide Batche funktionieren.
Genau das habe ich gesucht.
Vielen Dank
Mitglied: winget
winget 06.01.2011 um 16:27:59 Uhr
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