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-ID: 372715

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

rubberman
Lösung rubberman 02.05.2018 um 16:15:25 Uhr
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
Akeipra
Akeipra 02.05.2018 um 16:24:47 Uhr
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
Kraemer
Kraemer 02.05.2018 um 17:05:52 Uhr
Goto Top
rubberman
rubberman 02.05.2018 um 17:18:27 Uhr
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