belanglos
Goto Top

Möglichkeit per CMD Dateien zu kopieren, welche verteilt sind

Hallo,

gibt es eine Möglichkeit, Dateien per CMD kopieren zu lassen, welche auf mehrere Unterverzeichnisse verteilt sind? Problem ist nämlich, dass ich eine Liste mit Dateinamen habe, in welcher aber kein Verzeichnis angegeben ist. Nun möchte ich also, dass DATEI001.txt oder DATEI001.jpg in einem Ordner mit bspw. 100 Unterverzeichnissen gesucht wird und wenn gefunden, in ein vorgegebenes Verzeichnis kopiert wird.

Schon mal vielen Dank im Voraus!

Gruß

Content-ID: 110702

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

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

Combattent
Combattent 06.03.2009 um 10:54:51 Uhr
Goto Top
hallo belanglos,

ich bin jetzt nicht 100% sicher, aber kann das nicht robocopy?
bastla
bastla 06.03.2009 um 12:30:59 Uhr
Goto Top
Hallo belanglos!

Etwa so von der Kommandozeile:
for /f "delims=" %i in ('dir /s /b /a-d D:\Basisverzeichnis\DATEI001.txt') do @echo copy "%i" D:\Zielverzeichnis
bzw mit jeweils %%i als Batch.

Das "echo" vor dem "copy" ist nur zum Testen drin - so wird der Kopierbefehl zunächst nur angezeigt.

Zu beachten wäre noch, dass "copy" in einem Batch ohne Rückfrage bestehende Dateien überschreibt - falls es also mehrere Dateien des gesuchten Namens geben könnte, müsste für diesen Fall vorgesogrt werden.

Grüße
bastla
belanglos
belanglos 06.03.2009 um 13:21:07 Uhr
Goto Top
Mein Problem ist aber, dass ich ja nicht weiß, in welchem Verzeichnis die Dateien sind. Du hast ja jetzt ein Verzeichnis mit angegeben.

Wie stelle ich das denn dann an, wenn ich die Dateien Datei1.jpg, Datei2.jpg, Datei99.jpg usw (sind ca. 5000 Dateien) im Hauptverzeichnis inkl. Unterverzeichnisse suchen lassen möchte und diese dann zum Ziel kopieren lassen möchte?
bastla
bastla 06.03.2009 um 15:23:21 Uhr
Goto Top
Hallo belanglos!
Mein Problem ist aber, dass ich ja nicht weiß, in welchem Verzeichnis die Dateien sind. Du hast ja jetzt ein Verzeichnis mit angegeben.
Ich erwarte oder verlange ja kein Vertrauen - Du hättest doch auch einfach testen können ...

... und übrigens: Ich habe nicht nur ein (Start-)Verzeichnis, sondern auch "/s" angegeben.

Wie stelle ich das denn dann an, wenn ich die Dateien Datei1.jpg, Datei2.jpg, Datei99.jpg usw (sind ca. 5000 Dateien) im Hauptverzeichnis inkl. Unterverzeichnisse suchen lassen möchte und diese dann zum Ziel kopieren lassen möchte?
Wenn Du bereits eine Liste davon hast (etwa D:\Liste.txt), dann etwa so:
@echo off & setlocal
set "Basis=D:\"  
set "Ziel=X:\Archiv"  
set "Liste=D:\Liste.txt"  

for /f "usebackq delims=" %%d in ("%Liste%") do for /f "delims=" %%i in ('dir /s /b /a-d "%Basis%%%d" 2^>nul') do @echo copy "%%i" "%Ziel%"  
Falls Du doch nicht im Hauptverzeichnis beginnen wolltest, bei der Angabe des "Basis"-Verzeichnisses immer einen "\" an das Ende setzen.

Bei sehr vielen Dateien wird das allerdings etwas langsam sein - in diesem Fall böte es sich an, das Inhaltsverzeichnis in eine Datei zu schreiben und danach diese zu durchsuchen:
@echo off & setlocal
set "Basis=D:\"  
set "Ziel=X:\Archiv"  
set "Liste=D:\Liste.txt"  
set "DL=%temp%\DL.txt"  

dir /s /b /a-d "%Basis%">%DL%  
for /f "usebackq delims=" %%d in ("%Liste%") do for /f "delims=" %%i in ('findstr /e /i /c:"\\%%d" %DL%') do @echo copy "%%i" "%Ziel%"  
Noch die Variante ohne Liste (für "Datei1.jpg" bis "Datei99.jpg"):
echo off & setlocal
set "Basis=D:\"  
set "Ziel=X:\Archiv"  

for /L %%d in (1,1,99) do for /f "delims=" %%i in ('dir /s /b /a-d "%Basis%Datei%%d.jpg" 2^>nul') do @echo copy "%%i" "%Ziel%"  
Grüße
bastla
belanglos
belanglos 09.03.2009 um 09:12:43 Uhr
Goto Top
Vielen vielen Dank!!!

Habe mir bisher erst eine Batch-Datei mit der Liste erstellt. Klappt aber wunderbar. Noch mal Danke!
79323
79323 09.06.2009 um 10:35:32 Uhr
Goto Top
Zitat von @bastla:
Zu beachten wäre noch, dass "copy" in einem Batch ohne
Rückfrage bestehende Dateien überschreibt - falls es also
mehrere Dateien des gesuchten Namens geben könnte, müsste
für diesen Fall vorgesogrt werden.

Grüße
bastla


Hallo,

was kann ich dagegen machen, dass die Daten nicht überschrieben werden sondern zum Beispiel etwas angehängt wird (2) (3)...?

Gruß
seejay
bastla
bastla 09.06.2009 um 20:20:54 Uhr
Goto Top
Hallo seejay!

Das könnte (ungetestet) so gehen:
@echo off & setlocal
set "Basis=D:\"  
set "Ziel=X:\Archiv"  
set "Liste=D:\Liste.txt"  
set "DL=%temp%\DL.txt"  

dir /s /b /a-d "%Basis%">%DL%  
for /f "usebackq delims=" %%d in ("%Liste%") do for /f "delims=" %%i in ('findstr /e /i /c:"\\%%d" %DL%') do call :CopyFile "%%i"  
goto :eof

:CopyFile
set "Zusatz="  
set /a Nr=1
:Loop
if not exist "%Ziel%\%~n1%Zusatz%%~x1" goto :DoIt  
set /a Nr+=1
set "Zusatz=(%Nr%)"  
goto :Loop

:DoIt
copy %1 "%Ziel%\%~n1%Zusatz%%~x1"  
goto :eof
Grüße
bastla