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-Key: 110702

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

Printed on: April 24, 2024 at 13:04 o'clock

Member: Combattent
Combattent Mar 06, 2009 at 09:54:51 (UTC)
Goto Top
hallo belanglos,

ich bin jetzt nicht 100% sicher, aber kann das nicht robocopy?
Member: bastla
bastla Mar 06, 2009 at 11:30:59 (UTC)
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
Member: belanglos
belanglos Mar 06, 2009 at 12:21:07 (UTC)
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?
Member: bastla
bastla Mar 06, 2009 at 14:23:21 (UTC)
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
Member: belanglos
belanglos Mar 09, 2009 at 08:12:43 (UTC)
Goto Top
Vielen vielen Dank!!!

Habe mir bisher erst eine Batch-Datei mit der Liste erstellt. Klappt aber wunderbar. Noch mal Danke!
Mitglied: 79323
79323 Jun 09, 2009 at 08:35:32 (UTC)
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
Member: bastla
bastla Jun 09, 2009 at 18:20:54 (UTC)
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