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-Key: 208885

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: colinardo
colinardo Jul 01, 2013 updated at 10:39:35 (UTC)
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
Member: mylittleweb
mylittleweb Jul 01, 2013 at 10:35:16 (UTC)
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
Member: colinardo
colinardo Jul 01, 2013 at 10:38:30 (UTC)
Goto Top
hast du deine CSV wie ich geschrieben habe angepasst ?
also untereinander..
art1
art2
art3
Member: mylittleweb
mylittleweb Jul 01, 2013 at 10:45:31 (UTC)
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.
Member: colinardo
colinardo Jul 01, 2013 updated at 10:58:08 (UTC)
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...
Member: mylittleweb
mylittleweb Jul 01, 2013 at 10:59:02 (UTC)
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?
Member: colinardo
colinardo Jul 01, 2013 at 11:10:50 (UTC)
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.
Member: mylittleweb
mylittleweb Jul 01, 2013 at 11:22:05 (UTC)
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!"  )  
)
Member: colinardo
colinardo Jul 01, 2013 at 11:25:10 (UTC)
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.
Member: mylittleweb
mylittleweb Jul 01, 2013 at 11:39:32 (UTC)
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
Member: Endoro
Endoro Jul 01, 2013 updated at 14:28:23 (UTC)
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,
Member: mylittleweb
mylittleweb Jul 01, 2013 at 15:05:48 (UTC)
Goto Top
Das Funktioniert, danke!
Member: mylittleweb
mylittleweb Jul 01, 2013 at 15:13:54 (UTC)
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
Member: colinardo
colinardo Jul 01, 2013 at 15:27:26 (UTC)
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%"  
)
Member: mylittleweb
mylittleweb Jul 01, 2013 at 15:31:36 (UTC)
Goto Top
Funktioniert! Vielen Dank an alle Helfer! ;)

Grüße Jürgen