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ß
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ß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 110702
Url: https://administrator.de/contentid/110702
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo belanglos!
Etwa so von der Kommandozeile:
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
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
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
Hallo belanglos!
... und übrigens: Ich habe nicht nur ein (Start-)Verzeichnis, sondern auch "/s" angegeben.
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:
Noch die Variante ohne Liste (für "Datei1.jpg" bis "Datei99.jpg"):
Grüße
bastla
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%"
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%"
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%"
bastla
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
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
Hallo seejay!
Das könnte (ungetestet) so gehen:
Grüße
bastla
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
bastla