Batch Batchjob für Speiseplandownload inkl Umwandlung

  • Ersteller Ersteller NoobKiller
  • Erstellt am Erstellt am
N

NoobKiller

Gast
Hey CB'ler,

ich benötige bitte mal Hilfe.
Ich soll/möchte einen Batchjob für eine Windowsmaschine bauen, welcher wöchentlich immer den neuesten Speiseplan der Firma herunterlädt um diesen in einer InfoScreen-Präsentation darzustellen. Nachdem dieser heruntergeladen wurde, wird er vom PDF-Format, in welchem er nur vorliegt, als JPG umgewandelt.

Die Speisepläne schauen folgendermaßen aus:
Diese Woche -> 2013002088de.pdf
Nächste Woche -> 2013003088de.pdf

Wie kann ich das in der Batch so bauen, dass ich den Plan jede Woche heruntergeladen bekomme, obwohl sich der Dateiname ändert?

Nebeninfos:
Download erfolgt mit wget (http://sourceforge.net/projects/gnuwin32/files/wget/1.11.4-1/wget-1.11.4-1-setup.exe/download)
Umwandlung mit Boxoft PDF to JPG (http://www.boxoft.com/pdf-to-jpg/)
 
Scheduler ruft ein Batchprogramm auf. Das berechnet welche Kalenderwoche ist (dafür wird vermutlich die 6. und 7. Stelle von links reserviert sein) und lädt dann runter und macht den anderen kram.

Alternativ wirds doch irgendwo ne Seite geben, wo das ganze verlinkt ist? Einfach den href="" aus dem Link parsen und schon haste dein Downloadziel.
 
Wie Keepers schon meinte, ist das natürlich alles nicht so sicher, weil wenn die dort änderung in der Nummerischen reihenfolge vornehmen, haste wieder das Problem...
 
Du kannst dir auch mal XPDF bzw. pdftotext ansehen: http://www.foolabs.com/xpdf/home.html Insofern die PDF gut aufgebaut ist, lässt sich der Text gut extrahieren.

Mit
Code:
set str=%date%
set tme=%time%
for /f "tokens=1,2,3* delims=." %%i in ("%str%") do set str=%%k%%j%%i
for /f "tokens=1,2,3* delims=:." %%i in ("%tme%") do set tme=%%i%%j%%k
könntest du dann Datum und Zeit auseinander nehmen. Müsste man nur wissen, wie genau das Datum aufgebaut ist.

<Jahr>0<Monat:2>0<Matrikel?>.pdf
 
Für Sowas würde ich Windows Scripting Host oder bei neuerem Windows Powershell nehmen: Damit hast du eine vernünftige Skriptsprache in der du mit Strings und Arithmetik umgehen kannst.l
 
ansonsten immer den größten wert ziehen :) einfach den dateinamen ziehen - werden die alten dateien gelöscht? (wenn ja gibt es ja immer nur einen)
 
Hat jemand evtl einen guten Beispielcode oder sogar gleich den Lösungscode, denn ich verzweifle :D
Der heruntergeladene Plan soll dann immer den vorherigen Plan als JPG überschreiben, somit wird keiner wirklich lange gespeichert.
 
Wenn du mehr Infos rüberreichst, könnte man es sich überlegen. Es ist ja nicht mal bekannt, was der Dateiname aussagt.
 
Also der Dateiname ist, das haben wir schon herausgefunden, folgendermaßen aufgebaut:

2013002088de.pdf

2013 002 088 de .pdf
Jahr Kalenderwoche Standort Sprache

Reicht das als Infos?
 
3 stellige Kalenderwochen? Welcher Kalendertyp soll das sein, chinesisch, ägyptisch, myanmar-burma-indo-lateinisch mit arabischem system?

Das erscheint mir unlogisch - prüft das nochmal.

Beispielcodes zu String Konkatenation findet man mit Google zu genüge - sollen wir das auch übernehmen für dich?
 
Nee ka, sind aber sicher 3-stellige Kalenderwochen im Dateiformat... Wieso das so ist, ka...
Ansonsten bleibt hald immer eine 0 drinnen.
Also muss man allgemein nur mit Strings arbeiten?
 
wähle string year = "2013";
wähle string location = "088";
wähle string language = "de";
wähle string suffix = ".de";
wähle int kw = aktuelleKW();

falls kw < 10
wähle string kw = "00" + zuString(kw);
sonst
wähle string kw = "0" + zuString(kw);

Hilft dir dieser frei erfundene pseudocode ?
 
Das mit der Kalenderwoche wirst du eher weniger bis gar nicht per Batch hinbekommen (außer bei Zuhilfenahme von irgendeiner Software). Insofern müsstest du auf VBScript bzw. PowerShell ausweichen.

Per PowerShell Script:
Code:
$year = date +%Y
$week = (date +%U).ToString()
$loc = "088"
$lang = "de"

if( $week.length -lt 2 )
{
	$week = "00$week"
}
elseif( $week.length -lt 3 )
{
	$week = "0$week"
}

wget http://xyz.com/a/b/$year$week$loc$lang.pdf
Evtl. musst du vorher Set-ExecutionPolicy RemoteSigned setzen, damit du nicht signierte lokale und signierte remote Skripte ausführen kannst.
 
Code:
("{0}{1:D3}088de.pdf" -f (Get-Date).year, (Get-Date -uformat %V));
Ungefähr so wohl - aber das Formatting der Kalenderwoche klappt nicht, ist vermutlich irgendein Powershell-Bug... :freak:
 
Code:
("{0}{1:D3}088de.pdf" -f (Get-Date).year, (Get-Date -uformat %V).ToString().PadLeft( 3, '0' ))
Ich glaub ich müsste mich mit PowerShell mal mehr beschäftigen... :)
 
Jo, das klappt als Workaround. Trotzdem würde es mich auch interessieren, warum die Formatierung der Nummer fehlschlägt bzw. nicht angewandt wird.

[edit]: habs!
Code:
("{0}{1:D3}088de.pdf" -f (Get-Date).year, [int](Get-Date -uformat %V));
 
@Kanibal: Ist dein Code von gestern Nacht nun für Batch gedacht, oder muss man diesen doch in VBScript bzw PowerShell verwenden? :D
 
Das von Kanibal ist Powershell. Schonmal benutzt?

Datein in Powershell einfach mit dem Editor erstellen, dann .ps1 nennen und Start --> Ausführen und Powershell.exe öffnen. Dort kannste den Pfad deiner Datei angeben und somit den Code ausführen.
 
Mhm okok :) Ne PowerShell hab ich leider auch noch nie benutzt.
Aber kann man das ganze echt nicht in ner normalen Batch lösen?
Ich meine das deswegen mit der Batch, weil nicht nur ich das nachvollziehen müssen kann sondern auch andere, die sich ebenfalls nur in Batch auskennen. Heißt wennse mal was ändern müssen/wollen...
 
Zurück
Oben