mittels batch dateien kopieren, welche in csv-Datei benannt sind
Hallo
Folgende Problematik:
- in einem Verzeichnis mit diversen Unterverzeichnissen liegen Bilder (zB: AAA_0001.jpg)
- es wird eine CSV-Datei geben in welcher das entsprechende Unterverzeichnis sowie der Dateiname hinterlegt ist (zB: DB_120_10292)
- nun soll eine Batchdatei die CSV-Datei zeilenweise auslesen und die entsprechende Bilddatei in einen anderen Ordner kopieren
- es gibt keine Dupletten bzw gleichnamige Dateien/Verzeichnisse
Zwar habe ich früher mal in Java und anderen Programmiersprachen programmiert, nur ist das lange her.
Würde mich über ein wenig Schützenhilfe freuen!
Danke
EnzephaloN
Folgende Problematik:
- in einem Verzeichnis mit diversen Unterverzeichnissen liegen Bilder (zB: AAA_0001.jpg)
- es wird eine CSV-Datei geben in welcher das entsprechende Unterverzeichnis sowie der Dateiname hinterlegt ist (zB: DB_120_10292)
- nun soll eine Batchdatei die CSV-Datei zeilenweise auslesen und die entsprechende Bilddatei in einen anderen Ordner kopieren
- es gibt keine Dupletten bzw gleichnamige Dateien/Verzeichnisse
Zwar habe ich früher mal in Java und anderen Programmiersprachen programmiert, nur ist das lange her.
Würde mich über ein wenig Schützenhilfe freuen!
Danke
EnzephaloN
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85125
Url: https://administrator.de/contentid/85125
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo EnzephaloN und willkommen im Forum!
Einige Fragen vorweg:
- Wie ist die Beispielzeile aus der CSV-Datei zu interpretieren - soll das Verzeichnis (Quelle, oder doch Ziel?) "DB_120" und die Datei "10292" heißen, und wie lässt sich der Zusammenhang zu "AAA_0001.jpg" herstellen?
- Gibt es mehrere Unterverzeichnisebenen, oder nur mehrere Unterverzeichnisse des Quellverzeichnisses?
- Liegen auch im Quellverzeichnis Bilddateien?
- Gilt das Ziel "anderer Ordner" für alle Bilder?
Grüße
bastla
Einige Fragen vorweg:
- Wie ist die Beispielzeile aus der CSV-Datei zu interpretieren - soll das Verzeichnis (Quelle, oder doch Ziel?) "DB_120" und die Datei "10292" heißen, und wie lässt sich der Zusammenhang zu "AAA_0001.jpg" herstellen?
- Gibt es mehrere Unterverzeichnisebenen, oder nur mehrere Unterverzeichnisse des Quellverzeichnisses?
- Liegen auch im Quellverzeichnis Bilddateien?
- Gilt das Ziel "anderer Ordner" für alle Bilder?
Grüße
bastla
Guten Abend!
Entschuldigt mich, falls ich mit meinem Lösungsvorschlag völlig daneben liegen sollte - poste ihn denoch einmal!
so müsste das eigentlich hinhauen, wenn das .cmd file in dem Ordner ausgeführt wird, wo die Unterverzeichnisse darunterliegen! Einfach noch den Zielordnername angeben!
Grüsse tacker
Entschuldigt mich, falls ich mit meinem Lösungsvorschlag völlig daneben liegen sollte - poste ihn denoch einmal!
@Echo Off
For /F "tokens=1,2 delims=;" %%i in (pics.csv) DO CALL :BEARBEITEN %%i %%j
:BEARBEITEN
SET FOLDER=%1
SET PIC=%2
copy %FOLDER%\%PIC% zielordnername
SET FOLDER=
SET PIC=
so müsste das eigentlich hinhauen, wenn das .cmd file in dem Ordner ausgeführt wird, wo die Unterverzeichnisse darunterliegen! Einfach noch den Zielordnername angeben!
Grüsse tacker
@Biber
wobei ich das Zielverzeichnis auch erst erfinden musste.
Wieso in der CSV-Datei nicht gleich ein vollständiger bzw relativer Pfad steht, kann wohl nur EnzephaloN erklären.
Ansonsten noch ein Hinweis: eigentlich sollte kopiert werden ...
@tacker
Also ich sehe überhaupt keinen Grund für eine Entschuldigung ...
Grüße
bastla
Oder übersehe ich etwas?
So ganz klar ist die Frage Quell- oder Zielverzeichnis noch nicht beantwortet, aber ich würde es eher so wie tacker sehen - also die Umkehrung Deines Entwurfs (ebenfalls für die Direkteingabe an der Kommandozeile):For /F "tokens=1,2 delims=;" %i in (pics.csv) DO copy "%~i\%~j" "D:\Zielverzeichnis\">nul
Wieso in der CSV-Datei nicht gleich ein vollständiger bzw relativer Pfad steht, kann wohl nur EnzephaloN erklären.
Ansonsten noch ein Hinweis: eigentlich sollte kopiert werden ...
@tacker
Also ich sehe überhaupt keinen Grund für eine Entschuldigung ...
Grüße
bastla
@bastla
Das "move" hatte ich schon bewusst gewählt, weil ich vom umgekehrten Fall (Wegsortieren AUS einem Sammelsurium-Verzeichnis in irgendwas Strukturiertes) ausging.
Wenn der Sachverhalt aber ist, die jugendfreien Bilder aus den Ordnern 'Urlaub2003' bis 'Urlaub2007' in den Ordner 'FürMutti' zu kopieren, dann ist ein COPY verständlich.
Grüße
Biber
P.S. @tacker
Ich sehe auch überhaupt keinen Grund zum Entschuldigen.
...außerdem... wir geben kein Pardon hier...
Ansonsten noch ein Hinweis: eigentlich sollte kopiert werden ...
Okay, ich habe es jetzt auch nochmal gelesen.Das "move" hatte ich schon bewusst gewählt, weil ich vom umgekehrten Fall (Wegsortieren AUS einem Sammelsurium-Verzeichnis in irgendwas Strukturiertes) ausging.
Wenn der Sachverhalt aber ist, die jugendfreien Bilder aus den Ordnern 'Urlaub2003' bis 'Urlaub2007' in den Ordner 'FürMutti' zu kopieren, dann ist ein COPY verständlich.
Grüße
Biber
P.S. @tacker
Ich sehe auch überhaupt keinen Grund zum Entschuldigen.
...außerdem... wir geben kein Pardon hier...
Hallo EnzephaloN!
Eine etwas verallgemeinerte bzw gestraffte Version würde so aussehen (die "set"-Zeilen sind natürlich entsprechend anzupassen):
Das Testen kann Dir aber keiner abnehmen - bei einem Kopiervorgang in nur ein Zielverzeichnis (und mit einer exemplarischen Liste von zB nur 5 Bildern) ist das aber weder gefährlich noch aufwändig ...
Grüße
bastla
Eine etwas verallgemeinerte bzw gestraffte Version würde so aussehen (die "set"-Zeilen sind natürlich entsprechend anzupassen):
@echo off & setlocal
set "Liste=D:\Deine CSV-Datei.csv"
set "Basis=D:\Ordner mit Bild-Unterordnern"
set "Ziel=D:\Dein Zielordner"
if not exist "%Ziel%" md "%Ziel%"
for /f "usebackq tokens=1,2 delims=;" %%i in ("%Liste%") do copy "%Basis%\%%~i\%%~j" "%Ziel%\">nul
Grüße
bastla
hallo Leute,
ich habe ein ähnliches Problem. ich hab versucht mit diesen Code, aber leider ohne Erfolg.
kann bitte jemand weiterhelfen?
danke. mfg. flokam
ich habe ein ähnliches Problem. ich hab versucht mit diesen Code, aber leider ohne Erfolg.
@echo off & setlocal
set "Liste=D:\test\bild\Extraktion_BILD_DATEI.csv"
set "Basis=D:\test\bild\layout"
set "Ziel=D:\test\kopiert"
if not exist "%Ziel%" md "%Ziel%"
for /f "usebackq tokens=1 delims=" %%i in ("%Liste%") do copy "%Basis%\%%~i\%%~j" "%Ziel%\">nul
kann bitte jemand weiterhelfen?
danke. mfg. flokam
Hallo flokam!
Vorweg ist jedenfalls schon festzustellen, dass mit dem Auslesen nur eines "tokens" kein "%%~j" zur Verfügung stehen kann.
Wo es klemmt kannst Du übrigens selbst versuchen festzustellen, indem Du im Batch in Zeile 1 "echo off" auf "echo on" änderst und dann an der Kommandozeile so startest:
In der erstellten Datei "D:\BatchLog.txt" ist dann jeder Schritt des Ablaufes dokumentiert.
Grüße
bastla
kann bitte jemand weiterhelfen?
Am ehesten dann, wenn Dein Problem nicht nur "ähnlich", sondern ausreichend beschrieben ist (was insbes den Inhalt Deiner Datei "D:\test\bild\Extraktion_BILD_DATEI.csv" betrifft) ...Vorweg ist jedenfalls schon festzustellen, dass mit dem Auslesen nur eines "tokens" kein "%%~j" zur Verfügung stehen kann.
Wo es klemmt kannst Du übrigens selbst versuchen festzustellen, indem Du im Batch in Zeile 1 "echo off" auf "echo on" änderst und dann an der Kommandozeile so startest:
"D:\Dein Pfad\Dein Batch.bat" > D:\BatchLog.txt 2>>&1
Grüße
bastla
Hallo bastla,
danke für deine schnelle Antwort.
Also, die CSV_Datei sieht dann so aus:
die 00000 ist ein Unterverzeichnis. Wenn nötig, kann ich drauf verzichten.
Jetzt mochte ich über diese liste loopen und Dateien die auf z.B. D:\test\layout\00000 liegen
in eine neue Verzeichnis kopieren z.B. D:\test\kopiert
nur zu Info... ich habe nicht viel Ahnung von Batch Programmierung.
danke in Voraus
flokam
danke für deine schnelle Antwort.
Also, die CSV_Datei sieht dann so aus:
00000\00000933.jpg
00000\00000934.jpg
00000\00000935.jpg
00000\00000936.jpg
00000\00000937.jpg
die 00000 ist ein Unterverzeichnis. Wenn nötig, kann ich drauf verzichten.
Jetzt mochte ich über diese liste loopen und Dateien die auf z.B. D:\test\layout\00000 liegen
in eine neue Verzeichnis kopieren z.B. D:\test\kopiert
nur zu Info... ich habe nicht viel Ahnung von Batch Programmierung.
danke in Voraus
flokam
Hallo flokam!
Dann so:
Bereits im Zielordner existierende gleichnamige Dateien werden übrigens kommentarlos überschrieben.
Grüße
bastla
Dann so:
@echo off & setlocal
set "Liste=D:\test\Extraktion_BILD_DATEI.csv"
set "Basis=D:\test\layout"
set "Ziel=D:\test\kopiert"
if not exist "%Ziel%" md "%Ziel%"
for /f "usebackq delims=" %%i in ("%Liste%") do copy "%Basis%\%%~i" "%Ziel%\">nul
Grüße
bastla
Hallo bastla,
Danke für Deine Hilfe. Es funktioniert super.
Ich hätte noch eine Frage.
Wenn jetzt meine Liste so aussehen würde:
und die Bildern in die vorgegebenen Verzeichnis kopiert werden muss, geht dass?
z.B. 00000\00000933.jpg in das Verzeichnis 00000 unter Basis.
Man geht davon aus dass die Verzeichnisse nicht existieren.
wie müsste mein Code dann aussehen?
Grüße, flokam
Danke für Deine Hilfe. Es funktioniert super.
Ich hätte noch eine Frage.
Wenn jetzt meine Liste so aussehen würde:
00000\00000933.jpg
00001\00000934.jpg
00003\00000935.jpg
00006\00000936.jpg
00010\00000937.jpg
und die Bildern in die vorgegebenen Verzeichnis kopiert werden muss, geht dass?
z.B. 00000\00000933.jpg in das Verzeichnis 00000 unter Basis.
Man geht davon aus dass die Verzeichnisse nicht existieren.
wie müsste mein Code dann aussehen?
Grüße, flokam
Hallo flokam!
Sollte so gehen (wobei ich annehme, dass Du meinst "in das Verzeichnis 00000 unter Ziel"):
Grüße
bastla
Sollte so gehen (wobei ich annehme, dass Du meinst "in das Verzeichnis 00000 unter Ziel"):
@echo off & setlocal
set "Liste=D:\test\Extraktion_BILD_DATEI.csv"
set "Basis=D:\test\layout"
set "Ziel=D:\test\kopiert"
if not exist "%Ziel%" md "%Ziel%"
for /f "usebackq delims=" %%i in ("%Liste%") do xcopy /i "%Basis%\%%~i" "%Ziel%\%%~i*">nul
bastla
Hallo bastla,
VIELEN DANK. Du hast mir sehr geholfen Danke.
Du hast recht, es ging ums Ziel.
wie ich sehe da kommt der xcopy in Spiel und noch das i variable an ziel weiter gegeben oder?
wie gesagt, ich hab wenig Ahnung von Batchdateien. wenn Du noch Lust hast und ist nicht zu viel verlangt, ... kannst Du mir kurz/Grob erklären wie dieses Code funktioniert?
Vielen Dank nochmal
Ciao, flokam
VIELEN DANK. Du hast mir sehr geholfen Danke.
Du hast recht, es ging ums Ziel.
wie ich sehe da kommt der xcopy in Spiel und noch das i variable an ziel weiter gegeben oder?
wie gesagt, ich hab wenig Ahnung von Batchdateien. wenn Du noch Lust hast und ist nicht zu viel verlangt, ... kannst Du mir kurz/Grob erklären wie dieses Code funktioniert?
Vielen Dank nochmal
Ciao, flokam
Hallo flokam!
"xcopy" wird verwendet, damit bei Bedarf das Zielverzeichnis automatisch erstellt wird - "copy" kann das nicht.
Mit dem Schalter "/i" lässt sich verhindern, dass bei nicht-existentem Zielordner die Frage
In "%%~i" steht die aus der csv-Datei eingelesene Zeile ohne umgebende Anführungszeichen - diese setze ich (zur Sicherheit) dann selbst, allerdings um den gesamten Quell- bzw Zielpfad herum.
Grüße
bastla
"xcopy" wird verwendet, damit bei Bedarf das Zielverzeichnis automatisch erstellt wird - "copy" kann das nicht.
Mit dem Schalter "/i" lässt sich verhindern, dass bei nicht-existentem Zielordner die Frage
Ist das Ziel ... ein Dateiname
oder ein Verzeichnisname
(D = Datei, V = Verzeichnis)?
gestellt wird - damit das auch klappt, wenn das Ziel ein Dateiname sein soll, wird an das Ende der Zielangabe noch ein "*" gesetzt.oder ein Verzeichnisname
(D = Datei, V = Verzeichnis)?
In "%%~i" steht die aus der csv-Datei eingelesene Zeile ohne umgebende Anführungszeichen - diese setze ich (zur Sicherheit) dann selbst, allerdings um den gesamten Quell- bzw Zielpfad herum.
Grüße
bastla