kalisser
Goto Top

1 PDF duplizieren und umbenennen nach CSV mittels Batch

Hallo,

ich hoffe ihr könnt mir bei folgendem Problem helfen:

Ich habe eine CSV-Datei mit endlich vielen Einträgen (variiert zwischen 10 - 200, getrennt mit Semikolon). In dieser CSV stehen in Spalte 5 Dateinamen z.B. "123456-Test.pdf".

Ausgangslage

A B C D E
beispiel.pdf 123456TextText123465-Test.pdf
beispiel.pdf 222222TextText222222-Test.pdf
beispiel.pdf 445566TextText445566-Test.pdf

Zusätzlich habe ich noch eine PDF "beispiel.pdf". Diese soll so oft dupliziert und mit dem Namen aus Spalte 5 der CSV benannt werden, wie Zeilen in der CSV sind.

Kann man so etwas in Batch programmieren?

Pseudo-Code
Ich kann ein bisschen Java, daher sieht der Code Java ähnlicher face-wink Herausgekommen ist folgender Batch-Java-Pseudo-Code:

for (int i = 0;  i <= AnzahlAusstehendeZeilenInCSV ; i++)
{
kopierePDF();
BenennePDF();
naechsteZeileInCSV();
}

void kopierePDF()
{
xcopy C:\PDF\beispiel.pdf C:\PDF\kopiertesBeispiel.pdf
}

void BenennePDF()
{
ren "kopiertesBeispiel" "Name von Zeile1, Spalte5 der CSV"  
}

void naechsteZeileInCSV()
{
zeile = zeile +1
}

Meine Probleme

  1. Wie bekomme ich die Anzahl der Zeilen der CSV heraus und gehe dann in die nächste. Überlegt habe ich auch schon, dass der Benutzer einfach die Anzahl der Zellen übergibt (Ist ja nicht schwer bei Excel links an den Rand zu gucken face-wink).
  2. Das Kopieren sollte eigentlich klappen.
  3. Zum Benennen fand ich folgenden Eintrag ganz interessant: CSV Datei auslesen per Batch. Leider habe ich es nicht hinbekommen diesen Code auf mein Beispiel zu übertragen.

Danke für eure Hilfe.

Viele Grüße
Kalisser

Content-ID: 308102

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

Kraemer
Kraemer 24.06.2016 um 11:04:02 Uhr
Goto Top
Moin,

sieh dir das hier mal an.

Gruß Krämer
Kalisser
Kalisser 24.06.2016 aktualisiert um 12:24:58 Uhr
Goto Top
Moin Krämer,

vielen Dank für deine schnelle Antwort.

Ich habe den Code mal auf mein Beispiel angewendet und dann festgestellt, dass man es über Powershell starten muss.
Das ist leider hier auf dem Firmenrechner nicht möglich.

Die Konsole meckert dann rum, dass er $csvFile und foreach nicht erkennt.

Gibt's weitere Möglichkeiten?

VG
Kalisser
em-pie
em-pie 24.06.2016 um 12:55:49 Uhr
Goto Top
Moin,

ich würde es mit VBS machen.
Zunächst die csv Zeilenweise auslesen:
VBS - Zeilen aus Textdatei auslesen (regelm. Reihenfolge)
Speziell der Beitrag von TsukiSan

anschließend nimmst du jede Zeile, trennst die mit der Split-Funktion auf und erhälst ein Array, mit dem Wert jeder einzelnen Zeile. Wenn du dann den entsprechenden Wert hast, verwendest du diesen um deine PDF zu kopieren und umzubenennen.

Insgesamt sicherlich "relativ" aufwendig, aber vbs ist vermutlich leichter nachvollziehbarer (zumindest für mich) als ein Batch-Skript. Wobei das vermutlich daran liegt, dass ich mich mit Batch noch nie intensiv beschäftigt habe...

Gruß
em-pie
bastla
Lösung bastla 25.06.2016 um 11:49:31 Uhr
Goto Top
Hallo Kalisser und willkommen im Forum!

Dazu sollte ein Batch-Code etwa folgender Art genügen:
@echo off & setlocal
set "Quelle=D:\Dein Beispiel.pdf"  
set "Ziel=D:\Dein Zielordner"  
set "CSV=D:\Deine CSV.csv"  

md "%Ziel%" 2>nul  
for /f "usebackq tokens=5 delims=;" %%i in ("%CSV%") do copy "%Quelle%" "%Ziel%\%%i" >nul  
Bitte die Zeilen 2 bis 4 anpassen und den Zielpfad in Zeile 3 ohne abschließenden "\" schreiben ...

Grüße
bastla
Kalisser
Kalisser 05.07.2016 um 13:38:29 Uhr
Goto Top
Hallo bastla,

ich habe gerade deine Lösung ausprobiert und bin begeistert face-smile
Es macht auf den Punkt genau das, was ich wollte.

Vielen Dank und beste Grüße auch an alle anderen, die sich mit meinem Problem beschäftigt haben.

Kalisser