akeipra
Goto Top

Win 10 Batch: Datenname aus Liste Suchen und kopieren nach

Hallo zusammen,

Ich möchte anhand einer Liste die z.b 1,3,55,69,75,2,4, beinhaltet suchen lassen und genau diese Nummer in einen anderen Ordner kopieren.

Das hier ist mein Skript bisher:

@echo off &setlocal
set "sourceRoot=C:\xyz\hier liegen alle Bilder"  
set "sourceList=C:\xyz\liste mit Nummern.txt"  
set "destFolder=C:\xyz\Ziel Ordner\"  

for /f "delims=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.png"^|findstr /ig:"%sourceList%"') do (copy "%%~i" "%destFolder%\")  
PAUSE  

Wenn ich das nutze kopiert er allerdings alle und wenn ich nur eine Zeile verwende, dann klappt es mit einem.
Ich befürchte er nimmt bei meinem Code auch die Schnittemenge, sprich: wenn ich 7 angebe nimmt er auch: 70-79.

Kann mir da jemand fix aushelfen?.

Es sind nur PNG in meinem Fall

Mit freundlichen Grüßen

Markus

Content-Key: 372715

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

Printed on: May 7, 2024 at 19:05 o'clock

Member: rubberman
Solution rubberman May 02, 2018 at 14:15:25 (UTC)
Goto Top
Dann musst du deine Liste wohl einzeln abarbeiten lassen.

for /f "usebackq" %%i in ("%sourceList%") do for /f "delims=" %%j in ('dir /a-d /b /s "%sourceRoot%\%%~i.png"') do copy "%%~j" "%destFolder%\"  

Steffen
Member: Akeipra
Akeipra May 02, 2018 at 14:24:47 (UTC)
Goto Top
Super perfekt!
vielen Dank!

Aber da ich meinen Code auch nur kopiert habe von jemanden der mir das mal zukommen lassen hat und ich selber absolut nicht weiß was die einzelnen Befehle bedeuten(um es später mal selber zu skripten)...

Gibt es eine Webseite wo ich meinen Code Stück für Stück zerlegen kann? bzw was wie und warum geschrieben ist und sowas?

Oder mag mir den Code jemand so erklären?

z.b was bedeutet /f "usebackq" %%i usw....

Liebe Grüße
Markus
Member: Kraemer
Kraemer May 02, 2018 at 15:05:52 (UTC)
Goto Top
Member: rubberman
rubberman May 02, 2018 at 15:18:27 (UTC)
Goto Top
Eine FOR /F Scheife verarbeitet Streams (je nach verwendeten Anführungszeichen Dateistreams, Stringstreams, Standard-Eingabestreams). Das USEBACKQ ändert die Bedeutung der Anführungszeichen. Für Dateipfade ist es Best Practice sie in doppelte Anführungszeichen zu setzen, dafür ist die Angabe von USEBACKQ nötig. Die FOR /F Schleife arbeitet dann zeilenweise ab, wobei standardmäßig nur das erste durch Leerzeichen oder Tab getrennte Token verarbeite und der FOR Variablen zugewiesen wird (in deinem Fall egal, da du keine derartigen Trennzeichen in deinen Zeilen hast). Wie @Kraemer schon geschrieben hat, sich eine Befehlsreferenz anzuschauen hilft ...

Steffen