mar-el15

Mit Batch mehrere Dateien anhand einer Liste finden und kopieren

Hallo alle zusammen face-smile

Ich stehe vor folgender Aufgabe: Ich habe 4 Dateiordner, in denen sich jeweils ca. 500-1000 Dateien oder zum Teil noch weitere Unterordner befinden.
Jetzt habe ich eine Liste erhalten (eine einfache .txt Datei), auf der etwa hundert Dateinamen aufgelistet sind.
Gibt es eine Möglichkeit via Batch (oder Powershell Script) diese ganzen Ordner (und Unterordner) nach diesen Dateien absucht und entweder eine Liste ausgibt, in der der Dateipfad der Dateien aufgelistet wird (bzw. ein "NOT FOUND" oder ähnliches, wenn nichts gefunden wurde, oder besser noch: Die Dateien in ein anderes Verzeichnis kopiert.

Zum kopieren einer einzelnen Datei hab ich von früher schon was, das auch funktioniert:
set searchDirectory="C:\"  
set searchString="datei1.txt"  
set outputFolder="C:\ziel"  

set result="%TEMP%\search_result.txt"  
cd /D %searchDirectory%
dir /s /b | findstr %searchString% > %result%

set /p file=<%result%
cd /D %outputFolder%
copy "%file%"  

Und ich dachte, eigentlich muss ich dafür nur 2 Zeilen anpassen:

set searchDirectory="C:\"  
set sourceList="liste.txt"  
set outputFolder="C:\ziel"  

set result="%TEMP%\search_result.txt"  
cd /D %searchDirectory%
dir /s /b | findstr /ig:"%sourceList%" > %result%  

Aber natürlich funktioniert es nicht, weil die Zeichenfolgen aus "liste.txt" nicht gelesen werden können.
Liste.txt sieht in etwa folgendermaßen aus:
Datei1
Datei2
und so weiter... (Die Dateien haben nebenbei allesamt verschiedene Dateiformate.

Ich stehe bestimmt einfach nur auf dem Schlauch, aber es würde mich sehr freuen, wenn mir jemand helfen könnte.

Vielen Dank für eure Zeit und eure Hilfe!
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 5896460617

Url: https://administrator.de/forum/mit-batch-mehrere-dateien-anhand-einer-liste-finden-und-kopieren-5896460617.html

Ausgedruckt am: 08.06.2025 um 10:06 Uhr

TwistedAir
Lösung TwistedAir 07.02.2023 um 16:10:25 Uhr
Goto Top
Moin,

ich stups dich mal in die richtige Richtung: Tutorial zur FOR-Schleife

Bei Interesse lohnt sich auch das ganze Tutorial durchzulesen. face-smile

Gruß
TA
erikro
erikro 07.02.2023 um 17:33:02 Uhr
Goto Top
Moin,

niemals mit Batch. Da programmiert man sich einen Wolf und es kommt nie das richtige raus. Nimm die Powershell. Etwa so:

$filelist = get-content filelist.txt
$files = get-childitem -path x:\path -file -recurse
foreach($file in $files) {

     if($filelist.contains($file) {

          $file.fullname | out-file x:\ausgabe.txt -encoding utf8 -append
     }
}

Oder als fast Einzeiler zur direkten Eingabe auf der Konsole:

$array = get-content filelist.txt
get-childitem -File -recurse | %{if($array.contains($_.name)){out-file -path x:\ausgabe.txt -inputObject $_.fullname -encoding UTF8 -append}}

Ich hoffe, ich habe mich nicht vertippt. Ist nicht getestet.

hth

Erik
5175293307
Lösung 5175293307 07.02.2023 um 18:05:32 Uhr
Goto Top
$txt = Get-Content 'D:\filelist.txt'  
$quellordner = 'D:\Daten'  
$zielordner = 'E:\Ziel'  
Get-ChildItem $quellordner -File -Recurse | ?{$_.Name -in $txt} | select -Unique | copy-item -Destination $zielordner -verbose