mar-el15
Goto Top

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!

Content-Key: 5896460617

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

Printed on: June 16, 2024 at 19:06 o'clock

Member: TwistedAir
Solution TwistedAir Feb 07, 2023 at 15:10:25 (UTC)
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
Member: erikro
erikro Feb 07, 2023 at 16:33:02 (UTC)
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
Mitglied: 5175293307
Solution 5175293307 Feb 07, 2023 at 17:05:32 (UTC)
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