mylittleweb
Goto Top

Batch-Datei: Datei auslesen, verarbeiten und Bilder kopieren

Hallo Community,

ich möchte eine kleine Batch-Datei schreiben.

Dazu habe ich eine CSV oder Text-Datei (jeh nach dem, was besser ist). Die Einträge wären dabei durch ein Semikolon getrennt (art1;art2;art3;art4) (Dabei bin ich flexibel, sollten die Einträge so schlecht weiter zu verarbeiten sein, kann ich sie auch anders eintragen lassen.)

Zudem habe ich einen Ordner voller Bilder (D:\OrdnerVollerBilder).


Die Batch-Datei soll nun:
Alle Einträge der CSV oder Text Datei einlesen, überprüfen, welche Bilder mit einem der Einträge anfangen und diese dann in einen anderen Ordner kopieren.


Beispiel:

Datei:
art1;art2;art3

Bilder im Ordner:
art1.jpg
art2_käsekuchen.jpg
art3.jpg
art4.jpg


In einen neuen Ordner kopiert werden sollten hierbei nun:
art1.jpg
art2_käsekuchen.jpg
art3.jpg


Kann mir jemand helfen?

Grüße,
Jürgen

Content-ID: 208885

Url: https://administrator.de/forum/batch-datei-datei-auslesen-verarbeiten-und-bilder-kopieren-208885.html

Ausgedruckt am: 19.02.2025 um 22:02 Uhr

colinardo
colinardo 01.07.2013 aktualisiert um 12:39:35 Uhr
Goto Top
Hallo Jürgen,
warum machst du einen zweiten Thread mit dem selben Inhalt auf ??

Bau deine CSV besser so auf
art1
art2
art3
dann kannst du folgendes benutzen(Zeile 2-4 an deine Umgebung anpassen):
@echo off & setlocal ENABLEDELAYEDEXPANSION
set IMAGEFOLDER=D:\OrdnerVollerBilder
set TARGETFOLDER=D:\Zielordner
set CSVFILE=c:\csv.txt

for /f "tokens=*" %%k IN ('type "%CSVFILE%"') DO @(  
   set nr=%%k
   for %%l IN ("!IMAGEFOLDER!\!nr!*.jpg") DO @(  
      move "%%~fl" "!TARGETFOLDER!"  
   )
)

und lösche bitte einen Thread von den beiden ...
Grüße Uwe
mylittleweb
mylittleweb 01.07.2013 um 12:35:16 Uhr
Goto Top
Hallo Uwe,

der neue Thread wurde erstellt, weil der andere schlecht beschrieben war. Der alte wurde nun natürlich gelöscht.


Nun habe ich deinen Code übernommen und angepasst, jedoch funktioniert es nicht (es werden keine Bilder kopiert)

Mein Code:
@echo off & setlocal ENABLEDELAYEDEXPANSION 
set IMAGEFOLDER=C:\Users\jrg\Documents\test\test\kokoloco 
set TARGETFOLDER=C:\Users\jrg\Documents\test\test\hopfen 
set CSVFILE=C:\Users\jrg\Documents\test\test\test.csv
 
for /f "tokens=*" %%k IN ('type "%CSVFILE%"') DO @(   
   set nr=%%k 
   for %%l IN ("!IMAGEFOLDER!\!nr!*.jpg") DO (   
      move "%%~fl" "!TARGETFOLDER!"   
   ) 
)

Grüße, Jürgen
colinardo
colinardo 01.07.2013 um 12:38:30 Uhr
Goto Top
hast du deine CSV wie ich geschrieben habe angepasst ?
also untereinander..
art1
art2
art3
mylittleweb
mylittleweb 01.07.2013 um 12:45:31 Uhr
Goto Top
Ja habe ich.

Eine kleine, jedoch sehr wichtige Bemerkung noch, die ich vergessen habe und wahrscheinlich liegt es komplett daran.

Die Bilder fangen nicht alle mit "art" an.

Sie können "gustav1" "perter23" oder halt "art2" heißen.
colinardo
colinardo 01.07.2013 aktualisiert um 12:58:08 Uhr
Goto Top
Zitat von @mylittleweb:
Sie können "gustav1" "perter23" oder halt "art2" heißen.
das war mir klar.
Hier funktioniert das ganze aber einwandfrei...
mylittleweb
mylittleweb 01.07.2013 um 12:59:02 Uhr
Goto Top
Hier mal meine CSV-Datei

http://www.file-upload.net/download-7783943/test.csv.html (auf den weißen Download-Button mit dem grünen Pfeil links klicken, die restlichen sind Werbung)


Stimmt eventuell mit dieser etwas nicht?
colinardo
colinardo 01.07.2013 um 13:10:50 Uhr
Goto Top
die ist i.O.
dann mach halt mal das @echo off raus und starte die Batch mal in einer Konsole, und sieh nach was für einen Fehler er Dir bringt.
mylittleweb
mylittleweb 01.07.2013 um 13:22:05 Uhr
Goto Top
Ich schätze mal, das & danach muss ich dann auch noch löschen, oder?

Dann läuft es durch, ohne Fehlermeldung.
c:\test\hopfen>test.bat

c:\test\hopfen>setlocal ENABLEDELAYEDEXPANSION

c:\test\hopfen>set IMAGEFOLDER=C:\test\kokoloco

c:\test\hopfen>set TARGETFOLDER=C:\test\hopfen

c:\test\hopfen>set CSVFILE=C:\test\csv\test.csv

c:\test\hopfen>for /F "tokens=*" %k IN ('type "C:\test\csv\test.csv"') DO @(  
set nr=%k
 for %l IN ("!IMAGEFOLDER!\!nr!*.jpg") DO (move "%~fl" "!TARGETFOLDER!"  )  
)
colinardo
colinardo 01.07.2013 um 13:25:10 Uhr
Goto Top
Zitat von @mylittleweb:
Ich schätze mal, das & danach muss ich dann auch noch löschen, oder?
klar...
sind im Pfad IMAGEFOLDER wirklich deine Bilder ? oder habe wir uns da mit der Benennung der Variablen missverstanden.
mylittleweb
mylittleweb 01.07.2013 um 13:39:32 Uhr
Goto Top
im Pfad IMAGEFOLDER liegen meine Bilder. Ich schätze so ist es verständlicher, wenn die Ordner richtig benannt sind:

c:\movefiles\bat>test.bat

c:\movefiles\bat>setlocal ENABLEDELAYEDEXPANSION

c:\movefiles\bat>set IMAGEFOLDER=C:\movefiles\imagefolder

c:\movefiles\bat>set TARGETFOLDER=C:\movefiles\targetfolder

c:\movefiles\bat>set CSVFILE=C:\movefiles\csv\test.csv

c:\movefiles\bat>for /F "tokens=*" %k IN ('type "C:\movefiles\csv\test.csv"') DO  
 @(
set nr=%k
 for %l IN ("!IMAGEFOLDER!\!nr!*.jpg") DO (xcopy "%~fl" "!TARGETFOLDER!"  )  
)

Funktionieren tut es leider trotzdem nicht
Endoro
Endoro 01.07.2013 aktualisiert um 16:28:23 Uhr
Goto Top
Hallo Jürgen,

kannst du mal testen:

@echo OFF &setlocal
set "IMAGEFOLDER=C:\movefiles\imagefolder"  
set "TARGETFOLDER=C:\movefiles\targetfolder"  
set "CSVFILE=C:\movefiles\csv\test.csv"  
for /F usebackq %%k IN ("%CSVFILE%") DO xcopy "%IMAGEFOLDER%\%%k*.jpg" "%TARGETFOLDER%"  

lg,
mylittleweb
mylittleweb 01.07.2013 um 17:05:48 Uhr
Goto Top
Das Funktioniert, danke!
mylittleweb
mylittleweb 01.07.2013 um 17:13:54 Uhr
Goto Top
Leider muss ich jedoch nun noch etwas präziser werden, wenn es darum geht etwas zu kopieren.

Das Bild im Ordner darf nur kopiert werden, wenn es komplett dem Namen in der CSV-Datei entspricht, oder wenn es komplett dem Namen in der CSV-Datei entspricht, danach einen Unterstrich hat und der Rest ist dann wieder egal. Beispiel:


CSV-Eintrag
hkzt

Bilder
hkzt
hkzt_ad
hkztbs


Kopiert werden sollen:
hkzt
hkzt_ad
colinardo
colinardo 01.07.2013 um 17:27:26 Uhr
Goto Top
@echo OFF &setlocal
set "IMAGEFOLDER=C:\movefiles\imagefolder"  
set "TARGETFOLDER=C:\movefiles\targetfolder"  
set "CSVFILE=C:\movefiles\csv\test.csv"  
for /F usebackq %%k IN ("%CSVFILE%") DO (  
   xcopy "%IMAGEFOLDER%\%%k.jpg" "%TARGETFOLDER%"  
   xcopy "%IMAGEFOLDER%\%%k_*.jpg" "%TARGETFOLDER%"  
)
mylittleweb
mylittleweb 01.07.2013 um 17:31:36 Uhr
Goto Top
Funktioniert! Vielen Dank an alle Helfer! ;)

Grüße Jürgen