# Batchdatei erstellen [autom. Download in best. Ordner]



## Grafixboy (14. Mai 2007)

Benötige eine Batchdatei welche mir meine täglichen arbeiten am pc erleichtert.
Eins vorweg ich bin Leihe in Sachen Batchdateierstellung. Ich benutze: Windows XP SP2
----------------------------------------------------------------------------------------------------------------------------------

Hallo Leute ich habe folgendes Problem...

ich benötige eine Batchdatei welche tägl.(an amerikanisch Werkstagen)
eine Datei aus dem Internet lädt und in einen Ordner ablegt.

PS: Wenn kein Amerikanischer Werkstag ist ist da auch keine Datei da.

Die Datei ist folgendermaßen aufgebaut und liegt dort: (die Quelle ist immer die selbe)
"http:// www.teste-seite.de/test/130507.exe" [ttmmjj.exe]

(nur ein Beispie) (um in den Pfad u kommen muss ich auch einen Benutzername angeben und ein Passwort)

Sollte vielleich mal näher erklären:

die zu downloadene Datei ttmmjj.exe steht immer ab

Beispiel: 140507.exe steht z.B: spätestens am selben Tag um 22:00 im Netz
auf jeden Fall aber am darauffolgenden Tag.
also soll wenn ich batchdatei früh aufführen lasse nach start meines Pc's
abgefragt werden aktuelles datum -1 (für den gestrigen tag [vereinfacht dargestellt]),
ob diese Datei vorhanden ist.

Da soll die Datei dann abgelegt werden:

"C:\Programme\Prog-Name\Unterordner\ttmmjj.exe"

Am Ende soll eine Batchdatei aufgerufen werden welch ich aber schon habe.

Ich bedanke mich bei allen im Vorraus, bei denen die sich mit mir darüber
Gedanken machen. Und nützliche Beiträge beisteuern.

Beziehungsweise welche Möglichkeiten habe ich mein Ziel zu erreichen.
Mir würden schon Schlagwörter ausreichen den Rest würde ich mir u.U. selbst anlernen.

Ich denke das könnte für viele User einne nützliche sache sein.

Habe auch schon von einer Batch gelesen welche Vierenprogs aktualisiert wer so was hatt dafür wäre ich schon dankbar.
Und ich hätte eine Grundlage.


----------



## Andreas Gaisbauer (16. Mai 2007)

Hallo, das ist eigentlich kein problem. Du brauchst dazu einen Kommandozeilen Webclient wie wget oder curl - wird mit beiden funktionieren. Was wir aber noch unterscheiden müssen, ist wie du den Benutzernamen und das Passwort eingibst? Ist das ein Login über ein Formular auf einer Seite, oder ist das ein HTTP-Authentication-Fenster (Popup mit Username und Passwort feld)?

Wenn es sich HTTP-Authentication handelt, sollte es ungefähr so funktionieren:

```
@echo off
REM Setup ------------------------------------------------------------
set user=USERNAME
set pass=PASSWORD
set baseurl=http://www.teste-seite.de/test/
set target=C:\Programme\Prog-Name\Unterordner\


set jj=%date:~-2%
set mm=%date:~-7,2%
set /a tt=%date:~-10,2%-1
set file=%jj%%mm%%tt%.exe

wget --user=%user% --password=%pass% --output-document="%target%%file%" %baseurl%%file%
```

Wenn du die Wochentage einbauen willst, kommt es zu teil auf dein Betriebssystem und deine Ländereinstellungen an...


----------



## Grafixboy (16. Mai 2007)

Hallo habe schon nicht mehr dran geglaubt.
Danke erstmal für die Mühe.

Mit wGet benötige ich seltsamerweise kein PW liegt aber vielleicht dran das ich es bei Firefox abgespeichert habe mir kam das auch komisch vor.
Vielleicht sind auch nur die Recht schlampig gesetzt.
Es ist ein Login im Formular einer Seite. Mann kommt dann nur in ein Uterverzeichnis
in dem Beispie wäre das test.


```
@echo off
REM Setup ------------------------------------------------------------
set baseurl=http://www.teste-seite.de/test/
set target=C:\Programme\Prog-Name\Unterordner\

set jj=%date:~-2%
set mm=%date:~-7,2%
set /a tt=%date:~-10,2%-1
set file=%tt%%mm%%jj%.exe

wget  --output-document="%target%\%file%" %baseurl%%file%
```
Da fehlte noch ein Backslash target und File da er es sonst eine Orderebene tiefer unter folgendem Name ablegt: unterordner150507.exe

Das mit dem Benutzername und dem Passwort und wget habe ich erst vorgestern erfahren.
dann habe ich das mit datum mal von jjmmtt in ttmmjj umgewandelt funktioniert

zum Vortag (gestern):
Für heute den 16.05.2007 hat er mir erstmal richtiger weise folgendes ausgegeben "150507".
Ich denke das wird auch vom 2. bis zu letzten des Monats funktionieren
aber doch sicher nicht am 1. eines Monats oder irre ich mich da -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
außerdem muss jetzt noch eine zweite Batch die ich schon habe aufgerufen werden die
testerei.bat
das müste doch über das Call gehen oder ?


----------



## Andreas Gaisbauer (16. Mai 2007)

Grafixboy hat gesagt.:


> Mit wGet benötige ich seltsamerweise kein PW liegt aber vielleicht dran das ich es bei Firefox abgespeichert habe mir kam das auch komisch vor.


Hmmm das ist sehr komisch - hast du die Datei überprüft? Nicht, dass du nur eine 401-Statusseite als *.exe speicherst.



Grafixboy hat gesagt.:


> Vielleicht sind auch nur die Recht schlampig gesetzt.
> Es ist ein Login im Formular einer Seite. Mann kommt dann nur in ein Uterverzeichnis
> in dem Beispie wäre das test.


Kannst du es im Browser direkt aufrufen (das unterverzeichnis)? 



Grafixboy hat gesagt.:


> ```
> @echo off
> REM Setup ------------------------------------------------------------
> set baseurl=http://www.teste-seite.de/test/
> ...


Wenn dein target auf \ endet und du nich eines zwischen %target%\%file% setzt, haben wir aber C:\Programme\Prog-Name\Unterordner\\150507.exe oder übersehe ich jetzt etwas?



Grafixboy hat gesagt.:


> zum Vortag (gestern):
> Für heute den 16.05.2007 hat er mir erstmal richtiger weise folgendes ausgegeben "150507".
> Ich denke das wird auch vom 2. bis zu letzten des Monats funktionieren
> aber doch sicher nicht am 1. eines Monats oder irre ich mich da


nein -da hast du vollkommen recht -  das habe ich nicht bedacht... Ist das dein lokaler rechner? Oder können wir auf der Maschine was installieren? 



Grafixboy hat gesagt.:


> außerdem muss jetzt noch eine zweite Batch die ich schon habe aufgerufen werden die
> testerei.bat das müste doch über das Call gehen oder ?


Ja, das kannst du über call machen


----------



## Andreas Gaisbauer (16. Mai 2007)

Ich hatte eine Idee:


```
@echo off

REM Setup ------------------------------------------------------------
set baseurl=http://www.teste-seite.de/test/
set target=C:\Programme\Prog-Name\Unterordner\

REM Das Datum von gestern einlesen und den Filename zusammenbauen
set /p gestern=<gestern.txt
set jj=%gestern:~-2%
set mm=%gestern:~-7,2%
set tt=%gestern:~-10,2%
set file=%tt%%mm%%jj%.exe

REM Download
wget  --output-document="%target%\%file%" %baseurl%%file%

REM Das Datum in gestern.txt auf heute setztem, damit es morgen geslesen werden kann
echo %date% > gestern.txt

call testerei.bat
```
Damit es läuft, musst du zuerst (nur das erstemal) eine Datei "gestern.txt" anlegen, die das gestrige Datum als inhalt hat. Diese Datei wird dann an jedem Tag eingelesen und das Datum geparsed. Wenn der Download fertig ist, wird das aktuelle Datum in die "gestern.txt" geschrieben, die ja erst morgen wieder ausgelesen wird. Somit haben wir alles im Griff inklusive Schaltjahre


----------



## Grafixboy (16. Mai 2007)

Wow wow wow  danke für deine Mühe du bist ja ein Meister deines Faches hast mir damit sehr geholfen, insofern das klappt wovon ich ausgehe, mir etwas meiner tälichen Arbeit zu ersparen. Werde das auf jeden Fall gleich mal zusammenbauen und testen.

Die Datei ist einwandfrei und die Aktualisierung funktionierte tadellos. Und die Quelle ist mir sehr vertraut von jemanden den ich kenne.

Kann es im Browser auch direkt aufrufen (ist eine index seite die dem Inhalt eines Explorers ähnelt. Ist aber nicht weiter wichtig.



> Wenn dein target auf \ endet und du nich eines zwischen %target%\%file% setzt, haben wir aber C:\Programme\Prog-Name\Unterordner\\150507.exe oder übersehe ich jetzt etwas?


Nein du übersiehst nichts habe einen Fehler gemacht. Hat mich jetzt auch stutzig gemacht da muste ich nochmal schauen.
Aber du bist der Meister ich habe in der Batch versehentlich den Backslash nach dem unterordner gelöscht, sorry das ich dich verunsichert habe.



> Ist das dein lokaler rechner? Oder können wir auf der Maschine was installieren?


ja ist mein Rechner, kein Problem

Nun zu deiner Idee:
Eine Ähnliche Idee, nur komplizierter, hatte ich auch.
nur wuste ich nicht so recht über das auslesen aus einer *.txt datei bescheid.
Liege ich richtig das die Datei, wie du es jetzt programmiert hast im selben Ordner wie die Batch-Datei liegen muss ?
----------------------------------------------------------------------------------------------------------------------------------
-Kleines Gedankenspiel:
Da ja nicht jeden Tag ein Update vorhanden ist sondern nur wie oben erwähnt an amerikanischen Werkstagen und ich zwar oft am pc bin aber es auch mal vor kommt das ein ganzen tag der pc mal nicht in betrieb war, habe ich folgende Befürchtung:

muss ich noch durchdenken kommt noch (bin dabei)


----------



## Andreas Gaisbauer (16. Mai 2007)

Grafixboy hat gesagt.:


> Wow wow wow  danke für deine Mühe du bist ja ein Meister deines Faches hast mir damit sehr geholfen, insofern das klappt wovon ich ausgehe, mir etwas meiner tälichen Arbeit zu ersparen.


 Freut mich wenns geholfen hat



> Liege ich richtig das die Datei, wie du es jetzt programmiert hast im selben Ordner wie die Batch-Datei liegen muss ?


Ja, kann aber natürlich angepasst werden



> -Kleines Gedankenspiel:
> Da ja nicht jeden Tag ein Update vorhanden ist sondern nur wie oben erwähnt an amerikanischen Werkstagen und ich zwar oft am pc bin aber es auch mal vor kommt das ein ganzen tag der pc mal nicht in betrieb war, habe ich folgende Befürchtung:
> 
> muss ich noch durchdenken kommt noch (bin dabei)


LOL - sehr cool  , schreib einfach was dir durch den Kopf geht


----------



## Grafixboy (16. Mai 2007)

Also folgendes Problem:
So   200507            ->hier findet er keine Datei 190507 (weil kein Werkstag[Sa]) und setzt das datum auf  200507
 Mo   210507            ->hier findet er keine Datei 20507 (weil kein Werkstag[So]) und setzt das datum auf  210507
  Di    220507             -> an diesem Tag schaffe ich es warum auch immer nicht an den PC
   Mi   230507             !-> und jetzt lädt er die datei für den Mo den 210507 und setzt das datum auf den 230507
    Do  240507              !-> und jetzt wirds Brühe weil er jetzt den 230507 runterlädt und mir der 220507 fehlt

Und dies das ganze zu aktualisierende Prog. schrotten, unbrauchbar machen, würde.
Weil die Aktualisierungen strikt nach Reihenfolge aktualisiert werden müssen

also bräuchte ich eine "nochverbleibendeAktualisierungen.txt" in der eine Art Array erzeugt wird mit den fehlenden tagen seit der letzten Aktualisierung


----------



## Andreas Gaisbauer (16. Mai 2007)

Ja, das dachte ich mir schon... Und hier wirds mit Batch dann doch eher unpraktisch... 

1) Bleiben die Updatefiles in dem Verzeichnis liegen? Oder werden die von dem Programm gelöscht? 

2) Außerdem (ist mir grad aufgefallen) erzeugt wget ein leeres File wenn es die Datei am Server nicht findet. Sprich da müssen wir wegen den Wochenenden auch noch aufpassen.

3) Wie ist es wenn du dich übers Web einloggst und mehere Tage nicht online warst - siehst du dann eine Liste mit den files?


Lösungsansatz:
1) Auf dem Server einloggen
2) HTML Seite mit den links zu den Files speichern
3) diese HTML seite parsen
4) alle *.exe files die wir noch nicht haben runterladen
5) unser log aktualisieren


----------



## Grafixboy (16. Mai 2007)

1.)
Also im web bleiben die letzten 40 Aktualisierungen vom heutigen Tag an liegen.
Die heutige Aktualisierung wird also erst nach den nächsten 40 amerik. Werkstagen gelöscht werden.

2.)
Gott sei dank ist dir das noch vor dem morgigen Feiertag (obwohl feiern die das da überhaubt) eingefallen. Aber ich hatte ja eh schon ne Sicherheitskopie von den Daten gezogen.
Da brauchen wir ja das Wochentagskürzel (Sa,und So) und eine Abfrage.
Muss also mit in die gestern.txt .
Habe ich hier aber schon mal gesehen irgendwo.

3.)
die Liste mit den Files sehe ich immer
habe es im Browser abgespeichert.

Wenn wir nach deinem Lösungsansatz alle herunterladen muss dies aber in einem anderen Ordner geschehen da die andere Batsch doof ist und sonst alle diese dateien in heute.exe umbenennen würde und immer die vorherige in die nächste überschreiben würde und am ende nur dass aktuellste aktuallisieren würde.


----------



## Andreas Gaisbauer (16. Mai 2007)

Da muss ich jetzt eine Nacht drüber schlafen wie wir das am besten machen können...
Könntest du mir in der zwischenzeit das HTML File mit der Liste der Updates via PM schicken?
Und am besten auch gleich noch die "dumme" Batchdatei


----------



## Grafixboy (16. Mai 2007)

Ok mach ich gleich.


----------



## Andreas Gaisbauer (21. Mai 2007)

So... weiter gehts  Ich habe bei mir am Rechner einige Sachen automatisiert, die sonst sehr Zeitaufwändig wären (Rechnungen runterladen, Logfiles runterladen und Parsen, Backups usw). Ich verwende dafür bei mir lokal PHP. Die folgende Lösung sollte eigentlich alle Anforderungen erfüllen. Lad dir also PHP5 runter und installiere es (Webserver ist nicht nötig - läuft als CLI skript).

Ich habs (denke ich) ausreichend kommentiert, aber bitte denke es auch nocheinmal durch, bevor du es anwendest...

Aufruf auf der Konsole ist einfach "php skriptname.php"


```
<?php

$files   = array();
$newFiles= array();
$baseurl = 'http://www.test.de/';       // URL zur Seite
$index   = $baseurl.'index.html';       // Filename der Seite
$archive = 'x:\\test\\';                // Verzeichnis am Lokalen Rechner mit dem Archiv
$next    = 'x:\\test\\next\\';          // Verzeichnis mit den neuen Files


//HTML Seite Runterladen
$index_content = file_get_contents($index);


//Alle Links zu EXE files suchen und alle doppelten treffer rausschmeißen
//der erste Link auf der Seite ist der erste im Array
preg_match_all("|[0-9]{6}\.EXE|",$index_content,$temp_out, PREG_SET_ORDER);
foreach($temp_out as $file){
	$files[] = $file[0];	
}
$files = array_values(array_unique($files));


//Alle files in den "archiv"-Ordner runterladen die nicht im Archiv sind
foreach($files as $file){
	if(!file_exsists($archive.$file)){
		$newFiles[] = $file; //Das neueste File ist am Anfang des Arrays
		file_put_contents($archive.$file,$baseurl);
	}
}


//Array mit den neuen Files reversen, damit die ältersten, nicht 
//verarbeiteten Files am Anfang stehen...
$newFiles = array_reverse($newFiles);
foreach($newFiles as $file){
	//umbenennen von ddmmyy.exe in next/yymmdd.exe
	$d = substr($file,0,2);
	$m = substr($file,2,2);
	$y = substr($file,4,2);
	copy($archive.$file,$next.$y.$m.$d.'.EXE');
	
	//jetzt sollte im ordner next/ nur das älterste, noch nicht verwendete,
	//File liegen
	system('testerei.bat'); //ggf so ändern, dass es mit next/ arbeitet
	unlink($next.$y.$m.$d.'.EXE'); //Datei aus next/ löschen
}

// Ende - next/ sollte leer sein, alle Files auf der Seite liegen Archiv/ und 
// sind importiert

?>
```


----------



## Grafixboy (22. Mai 2007)

Bin immer wieder begeistert von dir und deiner hilfsbereitschaft. Mensch bist du fix danke ich schaue es mir heut mal an und werde heute abend meinen Senf dazu geben.
Aber erstmal ein dickes DANKE. 

Nach PHP5 habe ich eben mal gegoogelt aber noch nichts brauchbares gefunden.
Du meinst doch ein Programm mit dem Namen PHP5 oder nur ein Programm welches PHP 5 unterstützt wie z.B. Xampp ?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bin noch nicht ganz fertig mit studieren hatte heute viel um dir Ohren


----------



## Andreas Gaisbauer (23. Mai 2007)

Hi,

PHP5 ist der Interpreter der das Skript ausführen muss (da es in PHP geschrieben ist). Nimm einfach ein Paket von hier: http://www.php.net/downloads.php#v5 Mehr info http://de.wikipedia.org/wiki/PHP
PHP ist mittlerweile die am weitesten verbreitete Sprache wenn es um dynamische Webseiten geht. PHP ist zu 98% im Server-einsatz, man kann es aber auch zu Skripten auf "normalen" Rechnern verwenden. Ein all-in-one-Paket wie Xampp brauchst du nicht. Da wird nur noch ein Apache Webserver (den wir nicht brauchen) und ein MySQL Datenbank Server (den wir auch nicht brauchen) mitinstalliert.


----------



## Twinsetter (23. Mai 2007)

Muß mich hier mal einklinken.
War echt interessant diesen Thread zu lesen, auch wenn ich bisher nicht alle Schritte zu 100% nachvollziehen konnte.
Bin auf alle Fälle nicht dümmer geworden.

Es ist immer wieder schön zu sehen wie sich Leute engagieren um anderen zu helfen - versuche ich selbst auch. Ob's immer gelingt ?

Leider gibt es nicht in allen Foeren so uneigennützige Helfer. Ich find's toll.


----------



## Grafixboy (23. Mai 2007)

Hi @ Twinsetter 100% wirst du das nicht ganz verstehen können aber zu 90% bestimmt da wein paar Informationen über PM gegangen sind die ich hier nicht veröffentlichen darf.
Will mich ja an die Netikette halten.
------------------------------------------------------------------------------------------------------------------------------------
Nun aber weiter im Thema:
Habe mir PHP5-Paket runtergeladen (php-5.2.2-win32-installer.msi).
Was mir aus dem Script herraus noch nicht ganz klar ist benötigen wir denn jetzt noch die Batch-Datei welche wir schufen oder wird das dadurch das wir die webseite auslesen und die daten in Felder schreiben restlos unnötig und ich brauche somit auch kein wGet mehr ?
|| //HTML Seite Runterladen
|| $index_content = file_get_contents($index);
Aufgrund dessen denke ich mal ja.

Zum umbenennen der Dateien
|| //umbenennen von ddmmyy.exe in next/yymmdd.exe
machst du doch sicherlich nur des besseren sortierens wegen oder irre ich mich  da?
weil die eigentliche formatierung ja schon ddmmyy.exe ist.
oder meinst du das das egal ist weil sie bei der anderen Batch ja eh vorm verarbeiten in heute .exe umbenannt wird.

Ins Archiev-Feld "$files   = array();" schreibt er alles was er noch nicht 
aktualisiert hat richtig?
Und in in das "$newFiles= array();" schreibst du die nächste zu aktualisierende Datei.

Ansonsten hast gut kommentiert habe fast alles nachvollziehen können.

Habe mir das mal alles durch den Kopf gehen lassen und es sollte funktionieren.
Ich denke mal das ich es manuel über den Browser ausführen kann.
Doch wie mache ich das dann automatisiert.


----------



## Andreas Gaisbauer (23. Mai 2007)

> Was mir aus dem Script herraus noch nicht ganz klar ist benötigen wir denn jetzt noch die Batch-Datei welche wir schufen oder wird das dadurch das wir die webseite auslesen und die daten in Felder schreiben restlos unnötig und ich brauche somit auch kein wGet mehr ?
> || //HTML Seite Runterladen
> || $index_content = file_get_contents($index);
> Aufgrund dessen denke ich mal ja.


JA - wir brauchen kein Wget und dier erste Batch Datei ist auch überflüssig



> Zum umbenennen der Dateien
> || //umbenennen von ddmmyy.exe in next/yymmdd.exe
> machst du doch sicherlich nur des besseren sortierens wegen oder irre ich mich da?
> weil die eigentliche formatierung ja schon ddmmyy.exe ist.
> oder meinst du das das egal ist weil sie bei der anderen Batch ja eh vorm verarbeiten in heute .exe umbenannt wird.


Ich hab das nur gemacht, weil wir es in der alten Batch datei auch so gemacht haben. Sortierung sollte egal sein, da immer nur eine File in next-Ordner ist



> Ins Archiev-Feld "$files = array();" schreibt er alles was er noch nicht
> aktualisiert hat richtig?


Nein - in $files stehen alle Files die auf der Seite gefunden werden (also alle 40)



> Und in in das "$newFiles= array();" schreibst du die nächste zu aktualisierende Datei.


Hier stehen alle neue Files. Also die, die in der Liste $files stehen, aber noch nicht im Ordner "Archiv" liegen (also noch nicht runtergeladen wurden). Die Liste (normalerweise 1 File, es sei denn du warst am öfters nicht online) wird dann eins nach dem anderen Runtergeladen und in den Next Ordner kopiert.



> Ich denke mal das ich es manuel über den Browser ausführen kann.


Nein - dafür bräuchtest du einen installierten Webserver, der das PHP ausführt



> Doch wie mache ich das dann automatisiert.


Wie die Batch Datei auch. Du kannst es einfach auf der Kommandozeile aufrufen

```
php script.php

bzw

c:\Programme\...\php.exe script.php
```
Je nachdem ob das PHP Verzeichnis in deinem "Path" (Umgebungsvariablen) liegt.Den Aufruf kannst du auch in eine Batch Datei schreiben.


----------



## Grafixboy (23. Mai 2007)

Super probier ich gleich aus vielen lieben Dank schonmal vorne weg. 
Habe dir eine PM geschickt mit dem Link der Seite.
Schau sie dir mal an. Weiß nähmlich nicht ob das dann so mit dem download er Seite geht.


----------



## Andreas Gaisbauer (24. Mai 2007)

Hi,
das war eine gute Idee mit dem Link. Hatte noch einen Fehler im Skript. Hab es jetzt getestet. Er lädt alles wie gewollt runter und behandelt anschließen alle neuen Dateien mit einem Batchfile.

Hier mal die Ausgabe des skripts (Ich habs einmal laufen lassen um alles zu laden und dann einzelne Files rausgelöscht.)


```
230507.EXE gefunden 
230507.EXE bereits vorhanden
--------------------------------------------------------------------------------
220507.EXE gefunden 
220507.EXE bereits vorhanden
--------------------------------------------------------------------------------
210507.EXE gefunden 
210507.EXE bereits vorhanden
--------------------------------------------------------------------------------
180507.EXE gefunden 
180507.EXE bereits vorhanden
--------------------------------------------------------------------------------
170507.EXE gefunden 
170507.EXE bereits vorhanden
--------------------------------------------------------------------------------
160507.EXE gefunden 
160507.EXE bereits vorhanden
--------------------------------------------------------------------------------
150507.EXE gefunden 
150507.EXE bereits vorhanden
--------------------------------------------------------------------------------
140507.EXE gefunden 
140507.EXE bereits vorhanden
--------------------------------------------------------------------------------
110507.EXE gefunden 
110507.EXE bereits vorhanden
--------------------------------------------------------------------------------
100507.EXE gefunden 
100507.EXE bereits vorhanden
--------------------------------------------------------------------------------
090507.EXE gefunden 
090507.EXE bereits vorhanden
--------------------------------------------------------------------------------
080507.EXE gefunden 
080507.EXE bereits vorhanden
--------------------------------------------------------------------------------
010507.EXE gefunden 
010507.EXE bereits vorhanden
--------------------------------------------------------------------------------
300407.EXE gefunden 
Starte Download: http://www.[...]/kurse/300407.EXE
Download fertig
--------------------------------------------------------------------------------
270407.EXE gefunden 
270407.EXE bereits vorhanden
--------------------------------------------------------------------------------
260407.EXE gefunden 
260407.EXE bereits vorhanden
--------------------------------------------------------------------------------
250407.EXE gefunden 
250407.EXE bereits vorhanden
--------------------------------------------------------------------------------
240407.EXE gefunden 
240407.EXE bereits vorhanden
--------------------------------------------------------------------------------
230407.EXE gefunden 
230407.EXE bereits vorhanden
--------------------------------------------------------------------------------
200407.EXE gefunden 
200407.EXE bereits vorhanden
--------------------------------------------------------------------------------
190407.EXE gefunden 
190407.EXE bereits vorhanden
--------------------------------------------------------------------------------
180407.EXE gefunden 
180407.EXE bereits vorhanden
--------------------------------------------------------------------------------
170407.EXE gefunden 
170407.EXE bereits vorhanden
--------------------------------------------------------------------------------
130407.EXE gefunden 
130407.EXE bereits vorhanden
--------------------------------------------------------------------------------
120407.EXE gefunden 
120407.EXE bereits vorhanden
--------------------------------------------------------------------------------
100407.EXE gefunden 
100407.EXE bereits vorhanden
--------------------------------------------------------------------------------
090407.EXE gefunden 
090407.EXE bereits vorhanden
--------------------------------------------------------------------------------
060407.EXE gefunden 
060407.EXE bereits vorhanden
--------------------------------------------------------------------------------
050407.EXE gefunden 
050407.EXE bereits vorhanden
--------------------------------------------------------------------------------
300307.EXE gefunden 
Starte Download: http://www.[...]/kurse/300307.EXE
Download fertig
--------------------------------------------------------------------------------
290307.EXE gefunden 
290307.EXE bereits vorhanden
--------------------------------------------------------------------------------
280307.EXE gefunden 
280307.EXE bereits vorhanden
--------------------------------------------------------------------------------
270307.EXE gefunden 
270307.EXE bereits vorhanden
--------------------------------------------------------------------------------
260307.EXE gefunden 
260307.EXE bereits vorhanden
--------------------------------------------------------------------------------
230307.EXE gefunden 
230307.EXE bereits vorhanden
--------------------------------------------------------------------------------
220307.EXE gefunden 
220307.EXE bereits vorhanden
--------------------------------------------------------------------------------
210307.EXE gefunden 
210307.EXE bereits vorhanden
--------------------------------------------------------------------------------
200307.EXE gefunden 
200307.EXE bereits vorhanden
--------------------------------------------------------------------------------
190307.EXE gefunden 
190307.EXE bereits vorhanden
--------------------------------------------------------------------------------
160307.EXE gefunden 
160307.EXE bereits vorhanden
--------------------------------------------------------------------------------
150307.EXE gefunden 
150307.EXE bereits vorhanden
--------------------------------------------------------------------------------
140307.EXE gefunden 
140307.EXE bereits vorhanden
--------------------------------------------------------------------------------
130307.EXE gefunden 
130307.EXE bereits vorhanden
--------------------------------------------------------------------------------
120307.EXE gefunden 
120307.EXE bereits vorhanden
--------------------------------------------------------------------------------
090307.EXE gefunden 
090307.EXE bereits vorhanden
--------------------------------------------------------------------------------
080307.EXE gefunden 
080307.EXE bereits vorhanden
--------------------------------------------------------------------------------
070307.EXE gefunden 
070307.EXE bereits vorhanden
--------------------------------------------------------------------------------
060307.EXE gefunden 
060307.EXE bereits vorhanden
--------------------------------------------------------------------------------
020307.EXE gefunden 
020307.EXE bereits vorhanden
--------------------------------------------------------------------------------
010307.EXE gefunden 
010307.EXE bereits vorhanden
--------------------------------------------------------------------------------
280207.EXE gefunden 
280207.EXE bereits vorhanden
--------------------------------------------------------------------------------
270207.EXE gefunden 
270207.EXE bereits vorhanden
--------------------------------------------------------------------------------
260207.EXE gefunden 
260207.EXE bereits vorhanden
--------------------------------------------------------------------------------
230207.EXE gefunden 
230207.EXE bereits vorhanden
--------------------------------------------------------------------------------
220207.EXE gefunden 
220207.EXE bereits vorhanden
--------------------------------------------------------------------------------
210207.EXE gefunden 
210207.EXE bereits vorhanden
--------------------------------------------------------------------------------
200207.EXE gefunden 
200207.EXE bereits vorhanden
--------------------------------------------------------------------------------
190207.EXE gefunden 
190207.EXE bereits vorhanden
--------------------------------------------------------------------------------
160207.EXE gefunden 
160207.EXE bereits vorhanden
--------------------------------------------------------------------------------
150207.EXE gefunden 
150207.EXE bereits vorhanden
--------------------------------------------------------------------------------
140207.EXE gefunden 
140207.EXE bereits vorhanden
--------------------------------------------------------------------------------
130207.EXE gefunden 
130207.EXE bereits vorhanden
--------------------------------------------------------------------------------
120207.EXE gefunden 
120207.EXE bereits vorhanden
--------------------------------------------------------------------------------
090207.EXE gefunden 
090207.EXE bereits vorhanden
--------------------------------------------------------------------------------
080207.EXE gefunden 
080207.EXE bereits vorhanden
--------------------------------------------------------------------------------
070207.EXE gefunden 
070207.EXE bereits vorhanden
--------------------------------------------------------------------------------
060207.EXE gefunden 
060207.EXE bereits vorhanden
--------------------------------------------------------------------------------
050207.EXE gefunden 
050207.EXE bereits vorhanden
--------------------------------------------------------------------------------
020207.EXE gefunden 
020207.EXE bereits vorhanden
--------------------------------------------------------------------------------
010207.EXE gefunden 
010207.EXE bereits vorhanden
--------------------------------------------------------------------------------
300107.EXE gefunden 
Starte Download: http://www.[...]/kurse/300107.EXE
Download fertig
--------------------------------------------------------------------------------
290107.EXE gefunden 
290107.EXE bereits vorhanden
--------------------------------------------------------------------------------
260107.EXE gefunden 
260107.EXE bereits vorhanden
--------------------------------------------------------------------------------
250107.EXE gefunden 
250107.EXE bereits vorhanden
--------------------------------------------------------------------------------
240107.EXE gefunden 
240107.EXE bereits vorhanden
--------------------------------------------------------------------------------
230107.EXE gefunden 
230107.EXE bereits vorhanden
--------------------------------------------------------------------------------
220107.EXE gefunden 
220107.EXE bereits vorhanden
--------------------------------------------------------------------------------
190107.EXE gefunden 
190107.EXE bereits vorhanden
--------------------------------------------------------------------------------
180107.EXE gefunden 
180107.EXE bereits vorhanden
--------------------------------------------------------------------------------
170107.EXE gefunden 
170107.EXE bereits vorhanden
--------------------------------------------------------------------------------
160107.EXE gefunden 
160107.EXE bereits vorhanden
--------------------------------------------------------------------------------
150107.EXE gefunden 
150107.EXE bereits vorhanden
--------------------------------------------------------------------------------
120107.EXE gefunden 
120107.EXE bereits vorhanden
--------------------------------------------------------------------------------
110107.EXE gefunden 
110107.EXE bereits vorhanden
--------------------------------------------------------------------------------
100107.EXE gefunden 
100107.EXE bereits vorhanden
--------------------------------------------------------------------------------
090107.EXE gefunden 
090107.EXE bereits vorhanden
--------------------------------------------------------------------------------
080107.EXE gefunden 
080107.EXE bereits vorhanden
--------------------------------------------------------------------------------
050107.EXE gefunden 
050107.EXE bereits vorhanden
--------------------------------------------------------------------------------
040107.EXE gefunden 
040107.EXE bereits vorhanden
--------------------------------------------------------------------------------
010107.EXE gefunden 
010107.EXE bereits vorhanden
--------------------------------------------------------------------------------
Batchoutput -- Verarbeite
070130.EXE
-------------------------------------------------------------------------------
Batchoutput -- Verarbeite
070330.EXE
-------------------------------------------------------------------------------
Batchoutput -- Verarbeite
070430.EXE
-------------------------------------------------------------------------------
```

Hier noch die aktuelle Fassung des Skripts


```
<?php

$files   = array();
$newFiles= array();
$baseurl = 'http://www.[...]/kurse/';       // URL zur Seite
$index   = $baseurl;    			   // Filename der Seite (es gibt keine Index.html)
$archive = 'd:\\test\\';                // Verzeichnis am Lokalen Rechner mit dem Archiv
$next    = 'd:\\test\\next\\';          // Verzeichnis mit den neuen Files


//HTML Seite Runterladen
$index_content = file_get_contents($index);


//Alle Links zu EXE files suchen und alle doppelten treffer rausschmeißen
//der erste Link auf der Seite ist der erste im Array
preg_match_all("|[0-9]{6}\.EXE|",$index_content,$temp_out, PREG_SET_ORDER);
foreach($temp_out as $file){
    $files[] = $file[0];    
}
$files = array_values(array_unique($files));


//Alle files in den "archiv"-Ordner runterladen die nicht im Archiv sind
foreach($files as $file){
	echo $file.' gefunden '."\n";
    if(!file_exists($archive.$file)){
        $newFiles[] = $file; //Das neueste File ist am Anfang des Arrays
        echo 'Starte Download: '.$baseurl.$file."\n";        
        file_put_contents($archive.$file,file_get_contents($baseurl.$file));
		echo 'Download fertig'."\n";        
    }else{
    	echo $file.' bereits vorhanden'."\n";
    }
    echo '--------------------------------------------------------------------------------'."\n";
}


//Array mit den neuen Files reversen, damit die ältersten, nicht 
//verarbeiteten Files am Anfang stehen...
$newFiles = array_reverse($newFiles);
foreach($newFiles as $file){
    //umbenennen von ddmmyy.exe in next/yymmdd.exe
    $d = substr($file,0,2);
    $m = substr($file,2,2);
    $y = substr($file,4,2);
    copy($archive.$file,$next.$y.$m.$d.'.EXE');
    
    //jetzt sollte im ordner next/ nur das älterste, noch nicht verwendete,
    //File liegen
    passthru('D:\\test\\test.bat'); //ggf so ändern, dass es mit next/ arbeitet
    unlink($next.$y.$m.$d.'.EXE'); //Datei aus next/ löschen
}

// Ende - next/ sollte leer sein, alle Files auf der Seite liegen Archiv/ und 
// sind importiert

?>
```

Meine Test.bat macht nur ein dir/b in das verzeichnis - es zeigt also nur die Dateien im Verzeichnis an. Aber du siehst, es war nur immer ein file drinnen - und dass in der Reihenfolge alt nach neu...

bye


----------



## Grafixboy (24. Mai 2007)

Super jetzt bin ich endgültig baff und verblüfft zugleich ;-)
super gearbeitet. 
Hatte nähmlich noch keine Gelegenheit eine neue Sicherungskopie anzulegen und hatte deswege noch Zweifel ob er dann auch nach dem er die älteste zu bearbeitende Datei in den Ordner wo nur eine drinne liegt dann erst die batch bearbeitet und dann erst die nächste reinverschiebt.

Aber jetzt bin ich komplett von die Socken. 
Muss das noch fertig testen leider fehlt mir zur Zeit die Zeit. Tag müste 36 Stunden haben.

Von mir gibt es bis dahin einen klaren Daumen nach oben *top*


----------



## chrysler (27. Mai 2007)

Hallo.
Wenn ich mit MySQL prorammieren möchte, brauche ich dann einen MySQL Webserver? Wäre Xampp da zu empfehlen?

@Andreas Gaisbauer: Ich komme beim Auslesen von Variablen, Strings, Textdokumenten mit batch nicht weiter. Hast du eine Anleitung oder ähnliches?


----------



## Andreas Gaisbauer (27. Mai 2007)

> Hallo.
> Wenn ich mit MySQL prorammieren möchte, brauche ich dann einen MySQL Webserver?


Jein - kommt drauf an was du machen möchtest. Du brauchst nur einen Webserver, wenn du Webseiten ausliefern möchtest - ansonsten reicht dir eine Sprache deiner wahl und ein MySQL-Datenbank Server. Wenn du also nur was in die DB schreiben lassen willst, brauchst du keinen Webserver.



> Wäre Xampp da zu empfehlen?


Xampp ist zum lernen ausgezeichnet



> @Andreas Gaisbauer: Ich komme beim Auslesen von Variablen, Strings, Textdokumenten mit batch nicht weiter. Hast du eine Anleitung oder ähnliches?


Leider nicht wirklich. alles was ich noch weis, ist aus den alten DOS Tagen... Was brauchst du denn im speziellen?


----------



## chrysler (27. Mai 2007)

@Andreas Gaisbauer: 
Im Speziellen möchte ich Textdokumente 
I) als Ganzes, 
II) zeilenweise, 
III) bis zu einem Zeichen/Wort auslesen und in eine Variable speichern.

For-Schleifen mit dem Index %i möchte ich auch verstehen können.


----------



## Twinsetter (28. Mai 2007)

@chrysler
Ich habe da noch ein Buch aus alten DOS-Zeiten.Das heißt "Batch-Dateien" und ist im bhv-Verlag erschienen. ISBN:3-89360-618-1. Kostete damals 20DM. Meine Auflage ist allerdings noch von 1992. Dort ist alles sehr schön beschrieben. Ich schaue da heut manchmal noch rein, da mir z.B. die for Schleife mehr als suspekt ist.
Vielleicht kannst Du ja den Oldie noch in irgend einem Antiquariat oder der Bücherei auf spüren. Könnte aber sein, daß es noch mal ne Auflage gegeben hat.

Das was Du mit den Textdateien anstellen willst dürfte mit Batchverarbeitung unter DOS respektive Win nicht funktionieren. Ich denke, daß Du da eine Interpreterspache brauchst. Für Textverarbeitung ist dabei Perl prädistiniert. Auch mit PHP könnte man so was machen.
Du könntest evtl. auch mal cygwin versuchen. Das bildet die bash-Shell und diverse Linuxtools (grep, find etc.) unter Windows nach. Mit der bash ist es z.B. möglich Textdateien zeilenweise oder auch als Ganzes  einzulesen. Dann müßtest Du Dich aber in die Bash einarbeiten.
Unter Win würde ich zu Perl neigen.


----------



## Grafixboy (30. Mai 2007)

Hi Andreas Gaisbauer 

habe es jetzt schon mehrere male probiert aber er kopiert mir nicht die zu aktualiesierende 
also die neuste Datei in den next Ordner und führt auch die batch nicht aus.
Mach ich was falsch.

Der einzige unterschied ist eigendlich das mein Archiv-Ordner die tiefere Ordnerstruktur hat und der Ordner für die zu aktuallisierende Datei eine niedere.

also so:
root_1) d:\\test\\next\\archiev 
root_2) d:\\test\\next\\

also unter root_1 sind alle Dateien
und unter root_2 immer die eine zu aktu. Datei

Die Batch führt er auch nicht aus.
Im test als ich die php im selben Ordner wie die Batch hatte ging es aber.

MfG Grafixboy  
sry für die lange Antwortdauer


----------



## Andreas Gaisbauer (3. Juni 2007)

Hi,



> Im test als ich die php im selben Ordner wie die Batch hatte ging es aber.


Hast du den Pfad zu Batch Datei richtig angegeben? Also zum Beispiel c:\\test\\test.bat



> Der einzige unterschied ist eigendlich das mein Archiv-Ordner die tiefere Ordnerstruktur hat und der Ordner für die zu aktuallisierende Datei eine niedere.


Sollte nix machen... Schick mir doch dein angepasstest skript mal - vielleicht ist es ja nur eine kleinigkeit...


----------

