Dateien aus einer Liste (txt) finden und kopieren
Dateien (Bilder) deren Dateinamen in einer Liste vorliegen die aber in verschiedenen Untordnern liegen finden und in einen Ordner kopieren
Ich muss regelmässig Bilddateien aus einer Ortdnerstruktur finden und in bearbeiten.
Ich suche ein Tool / Batchdatei / Script das:
die Liste sieht ewa so aus:
5689
8977
45887
(Die Dateinamen sind da also ohne Erweiterung , aber das könnte ich ggf ja einfach ändern...)
Die dateien liegen in Unterverzeichnissen eines Ordners und sollen gefunden und in einen gemeinsamen Zielordner kopiert werden.
Leider bin ich nirgendwo fündig geworden und ich kann sowas nicht...?
Dürfte doch eigentlich gar nicht soo kompliziert sein, oder??
Ich muss regelmässig Bilddateien aus einer Ortdnerstruktur finden und in bearbeiten.
Ich suche ein Tool / Batchdatei / Script das:
die Liste sieht ewa so aus:
5689
8977
45887
(Die Dateinamen sind da also ohne Erweiterung , aber das könnte ich ggf ja einfach ändern...)
Die dateien liegen in Unterverzeichnissen eines Ordners und sollen gefunden und in einen gemeinsamen Zielordner kopiert werden.
Leider bin ich nirgendwo fündig geworden und ich kann sowas nicht...?
Dürfte doch eigentlich gar nicht soo kompliziert sein, oder??
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 106321
Url: https://administrator.de/forum/dateien-aus-einer-liste-txt-finden-und-kopieren-106321.html
Ausgedruckt am: 30.04.2025 um 15:04 Uhr
18 Kommentare
Neuester Kommentar

Serus und willkommen,
auch wenn es nicht die netteste Begrüßung ist - Bastla muß sowas dauernd schreiben, das hätte dir auch vor dem Posten deines Beitrages auffallen können - das dein Wunsch Hier (fast täglich immer leicht anders formuliert) gestellt wird.
Gruß
auch wenn es nicht die netteste Begrüßung ist - Bastla muß sowas dauernd schreiben, das hätte dir auch vor dem Posten deines Beitrages auffallen können - das dein Wunsch Hier (fast täglich immer leicht anders formuliert) gestellt wird.
Gruß
Moin schikopix,
willkommen im Forum.
Und da kannst Du noch froh sein, dass T-Mo diesen Beitrag vor mir gefunden hat.
Nur ganz kurz:
Grüße
Biber
willkommen im Forum.
Und da kannst Du noch froh sein, dass T-Mo diesen Beitrag vor mir gefunden hat.
Nur ganz kurz:
- Wir begrüßen uns hier nicht mit "Dateien (Bilder) deren Dateinamen in einer Liste vorliegen die aber in"
- und die hier übliche Abschiedsfloskel ist nicht "Dürfte doch eigentlich gar nicht soo kompliziert sein, oder??"
Grüße
Biber
Hallo schikopix und auch von mir ein Willkommen!
Unter der Annahme, dass es innerhalb der Quelldatenstruktur die entsprechende Datei nur einmal gibt, sollte das etwa so gehen:
Falls im Zielordner bereits eine gleichnamige Datei vorhanden sein sollte, wird eine dreistellige laufende Nummer an die neu kopierte Datei angefügt.
Die Zeile21 22 soll den Bearbeitungsfortschritt dokumentieren und kann bei Nichtgefallen ersatzlos gestrichen werden. [Edit] Wie von Biber (thx) unten schon angemerkt, meinte ich natürlich tatsächlich die Zeile 22 ... [/Edit]
Grüße
bastla
P.S.:
@timobeil: Wenn ich müssen müsste würde ich vermutlich ohnehin nicht wollen können ...
... aber schön, dass Du Dich um mich sorgst.
Unter der Annahme, dass es innerhalb der Quelldatenstruktur die entsprechende Datei nur einmal gibt, sollte das etwa so gehen:
@echo off & setlocal
set "Source=G:\Sabrina_06_2009\RAW"
set "Archiv=G:\ziel"
set "List=G:\text.txt"
for /f "usebackq delims=" %%i in ("%List%") do call :ProcessFile "%%i"
goto :eof
:ProcessFile
for /f "delims=" %%a in ('dir /s /b "%Source%\%~1"') do set "S=%%a"
set /a Nr=1000
set "T=%Archiv%\%~1"
:Loop
if not exist "%T%" goto :DoIt
set /a Nr+=1
set "T=%Archiv%\%~1_%Nr:~-3%"
goto :Loop
:DoIt
echo %S% --^> %T%
copy "%S%" "%T%" >nul
goto :eof
Die Zeile
Grüße
bastla
P.S.:
@timobeil: Wenn ich müssen müsste würde ich vermutlich ohnehin nicht wollen können ...
... aber schön, dass Du Dich um mich sorgst.
Moin schikopix,
danke fürs Feedback - dann habe ich alles erreicht, was ich erhofft habe.
Das war aber hoffentlich auch "im Sinne des Forums".
Dann kann ich ja jetzt das vorhin mühsam zurückgehaltene Lob nachreichen:
Das Problem ist verständlich und sauber beschrieben und auf Anhieb im richtigen Bereich gelandet.
Wenn Du jetzt demnächst auch noch die -Formatierungsmöglichkeiten entdeckst, dann steht einem konstruktiven Umgang nichts mehr im Wege.
Schönes Wochenende
Biber
P.S. bastla meinte Zeile 22 und nicht 21.
danke fürs Feedback - dann habe ich alles erreicht, was ich erhofft habe.
Das war aber hoffentlich auch "im Sinne des Forums".
Dann kann ich ja jetzt das vorhin mühsam zurückgehaltene Lob nachreichen:
Das Problem ist verständlich und sauber beschrieben und auf Anhieb im richtigen Bereich gelandet.
Wenn Du jetzt demnächst auch noch die -Formatierungsmöglichkeiten entdeckst, dann steht einem konstruktiven Umgang nichts mehr im Wege.
Schönes Wochenende
Biber
P.S. bastla meinte Zeile 22 und nicht 21.
Hallo schikopix!
Eine Information fehlt mir in Deiner Rückmeldung: Wurde denn etwas kopiert?
Falls nein, ändere bitte das "echo off" in der ersten Zeile auf "echo on" und starte den Batch an der Eingabeaufforderung. Es werden dann alle Zeilen vor der Ausführung angezeigt (und zwar mit bereits "aufgelösten" Variablen, sodass also etwa anstelle von "%List%" bereits "G:\text.txt" zu lesen ist) - so sollte sich dem Fehler auf die Spur kommen lassen.
Grüße
bastla
Habe mir den Quelltext anzeigen lassen, in Editor kopiert, und als datei.bat gespeichert? Wenn ich die Datei ausführe, läuft zwar was ab, ...
Bis hierher völlig ok.... aber so schnell, dass ich es nicht lesen kann.
Mein Fehler - ich teste Batches immer von der Eingabeaufforderung aus (was ich auch Dir empfehlen würde - auch, weil dann ev Fehlermeldungen leichter zu erkennen sind), und hatte daher nicht daran gedacht, Dir die Zeit zum Lesen der Ausgaben zu verschaffen. Das lässt sich aber leicht ändern: Füge vor der Zeile 7 ("goto :eof") noch eine Zeile mit "pause" ein.wenn ich die obigen Zeilen direkt in die eingabeaufforderung kopiere kommt:
"%%i" kann syntaktisch an dieser Stelle nicht verarbeitet werden.??
Abgesehen davon, dass, wegen der Schleife und dem verwendeten Unterprogramm eine Ausführung der einzelnen Zeilen in der Eingabeaufforderung keinen Sinn machen und das so nicht funktionieren würde, wären die Schleifenvariablen %%i und %%a dann mit jeweils nur einem Prozentzeichen zu schreiben."%%i" kann syntaktisch an dieser Stelle nicht verarbeitet werden.??
Eine Information fehlt mir in Deiner Rückmeldung: Wurde denn etwas kopiert?
Falls nein, ändere bitte das "echo off" in der ersten Zeile auf "echo on" und starte den Batch an der Eingabeaufforderung. Es werden dann alle Zeilen vor der Ausführung angezeigt (und zwar mit bereits "aufgelösten" Variablen, sodass also etwa anstelle von "%List%" bereits "G:\text.txt" zu lesen ist) - so sollte sich dem Fehler auf die Spur kommen lassen.
Grüße
bastla
Hallo schikopix!
Versuch's mal damit:
Grüße
bastla
Versuch's mal damit:
@echo off & setlocal
set "Source=G:\Sabrina_06_2009\RAW"
set "Archiv=G:\ziel"
set "List=G:\text.txt"
set "Ext=.CR2"
for /f "usebackq delims=" %%i in ("%List%") do call :ProcessFile "%%i"
pause
goto :eof
:ProcessFile
for /f "delims=" %%a in ('dir /s /b "%Source%\%~1%Ext%"') do set "S=%%a" & call :ProcessSingleFile %1
goto :eof
:ProcessSingleFile
set /a Nr=1000
set "T=%Archiv%\%~1%Ext%"
:Loop
if not exist "%T%" goto :DoIt
set /a Nr+=1
set "T=%Archiv%\%~1_%Nr:~-3%%Ext%"
goto :Loop
:DoIt
echo %S% --^> %T%
copy "%S%" "%T%" >nul
goto :eof
bastla
Hallo schikopix!
Führe bitte folgendes durch:
und poste das Ergebnis (soweit es sich nicht um sensible Daten oder eine seeehr lange Liste handelt) unter Verwendung der (die im Übrigen auch für das Posten von Batches oder Ablaufprotokollen zu empfehlen wäre).
Du kannst auch selbst ganz gezielt nach zB "G:\Sabrina_06_2009\RAW\S9067644.CR2" per CMD-Befehl
und im Explorer suchen - eigentlich dürftest Du die Datei nicht finden. Falls sie doch vorhanden ist, kontrolliere im Explorer in den Eigenschaften, ob sie als "Versteckt" gekennzeichnet ist bzw per CMD:
Es sollte nur das Attribut "A" (oder noch nicht einmal dieses) angezeigt werden.
Deine "test.txt" müsste so aussehen:
Stelle sicher, dass keine weiteren Inhalte - speziell Leerzeichen - nach den Dateinamen folgen (sollte aber schon in der aktuellen Fassung nicht der Fall sein) und lasse auch in der ersten Zeile die Dateierweiterung weg.
Grüße
bastla
Führe bitte folgendes durch:
dir /s /b /a-d "G:\Sabrina_06_2009\RAW\*.CR2"
Du kannst auch selbst ganz gezielt nach zB "G:\Sabrina_06_2009\RAW\S9067644.CR2" per CMD-Befehl
dir /s /b "G:\Sabrina_06_2009\RAW\S9067644.CR2"
attrib "HierVollständigerPfadZurDatei"
Deine "test.txt" müsste so aussehen:
S9065481
S9065613
S9067644
Grüße
bastla
Hallo schikopix!


Grüße
bastla
Ich freue mich!
Ich mich auch. PS: und das mit dem lerne ich hoffentlich auch noch !
Dann bliebe eigentlich nur noch der Wunsch offen, dass Du diesen Beitrag als "Wie kann ich einen Beitrag als gelöst markieren?" kennzeichnen mögest ... Grüße
bastla
Hallo,
vielen Dank für das Skript!
Was muss ich im Skript ändern, um nach Dateien zu suchen, die bestimmte Zeichen enthalten?
In der TXT liste ich z.B. unsere Artikelnummer "0815" auf, die Dateinamen der Bilder können aber auch wie folgt aussehen:
- "0815_vorne" oder
- "hinten_0815" oder nur
- "0815"
Hier das aktuell verwendete Skript:
@echo off & setlocal
set "Source=C:\Users\mipruss\Desktop\Bildersuche\Quellordner"
set "Archiv=C:\Users\mipruss\Desktop\Bildersuche\archiv"
set "List=C:\Users\mipruss\Desktop\Bildersuche\Bilderliste.txt"
set "Ext=.*"
for /f "usebackq delims=" %%i in ("%List%") do call :ProcessFile "%%i"
pause
goto :eof
:ProcessFile
for /f "delims=" %%a in ('dir /s /b "%Source%\%~1%Ext%"') do set "S=%%a" & call :ProcessSingleFile %1
goto :eof
:ProcessSingleFile
set /a Nr=1000
set "T=%Archiv%\%~1%Ext%"
:Loop
if not exist "%T%" goto :DoIt
set /a Nr+=1
set "T=%Archiv%\%~1_%Nr:~-3%%Ext%"
goto :Loop
:DoIt
echo %S% --^> %T%
copy "%S%" "%T%" >nul
goto :eof
Besten Dank!
vielen Dank für das Skript!
Was muss ich im Skript ändern, um nach Dateien zu suchen, die bestimmte Zeichen enthalten?
In der TXT liste ich z.B. unsere Artikelnummer "0815" auf, die Dateinamen der Bilder können aber auch wie folgt aussehen:
- "0815_vorne" oder
- "hinten_0815" oder nur
- "0815"
Hier das aktuell verwendete Skript:
@echo off & setlocal
set "Source=C:\Users\mipruss\Desktop\Bildersuche\Quellordner"
set "Archiv=C:\Users\mipruss\Desktop\Bildersuche\archiv"
set "List=C:\Users\mipruss\Desktop\Bildersuche\Bilderliste.txt"
set "Ext=.*"
for /f "usebackq delims=" %%i in ("%List%") do call :ProcessFile "%%i"
pause
goto :eof
:ProcessFile
for /f "delims=" %%a in ('dir /s /b "%Source%\%~1%Ext%"') do set "S=%%a" & call :ProcessSingleFile %1
goto :eof
:ProcessSingleFile
set /a Nr=1000
set "T=%Archiv%\%~1%Ext%"
:Loop
if not exist "%T%" goto :DoIt
set /a Nr+=1
set "T=%Archiv%\%~1_%Nr:~-3%%Ext%"
goto :Loop
:DoIt
echo %S% --^> %T%
copy "%S%" "%T%" >nul
goto :eof
Besten Dank!