Vinzenz Mai: Und nochmal: Autom. jüngste Datei hochladen

Beitrag lesen

Hallo Christian,

Ich habe mein Problem, welches ich vor über 2 Monaten schon einmal hier formuliert habe, immer noch nicht gelöst:
http://forum.de.selfhtml.org/archiv/2005/6/t108873/#m679045

Bio hat mir ja freundlicherweise ein paar Vorschläge gemacht:

"Es gibt da wahrscheinlich einen Befehl "cut" - im Notfall tut's ggf. ein ed-Skript (waaaah! Stoneage-Technology!), wo Du die Zeile durchpipst."

Den Befehl "cut" gibbet leider so nicht. Über ed-Skripte hab ich ne ganze Zeit gegooglet, aber nicht viel Verwertbares gefunden... eine Möglichkeit wärs vielleicht, aber ich steck da überhaupt nicht drin in der Materie...

Den gibt es schon, nur vielleicht nicht auf den Systemen, auf denen Du das Problem hast :-)

"Und normalerweise kann man Variablen relativ leicht das Ergebnis irgendeiner Programmausführung zuweisen, unter Unix jedenfalls mit backquotes, aber unter DOS geht das IMHO auch..."
Der Hinweis hat mir so leider auch nur wenig gebracht. Auch hier habe ich weder Ahnung noch Anlaufstelle für Lösung.

Betriebssysteme, auf denen das laufen muss?
[ ] DOS 3.0
[ ] DOS 6.22
[ ] Windows 9x
[ ] Windows NT 3.5x
[ ] Windows NT 4.0
[ ] Windows 2000 (Professional oder Server)
[ ] Windows XP (Home oder Professional)
[ ] weiteres

Meine weiteren Ausführungen beziehen sich auf die Shell CMD von Windows 2000 und Windows XP, getestet unter Windows XP Professional.

"Im Notfall schreibt man das Ergebnis in eine Datei und liest es dann zurück."
Ich wählte dann erstmal den Notfall. Mit dir /O:D /B /S /A:D > dir.txt erhalte ich die gewünschte Verzeichnisliste in der dir.txt und zwar so, dass das Verzeichnis mit der jüngsten Datei in der letzten Zeile steht. Das sieht bei mir jetzt also einfach so aus:

C:\temp\V\11
C:\temp\V\10
C:\temp\V\02
C:\temp\V\15
C:\temp\V\09

Ist doch schon mal was.

Wie schneide ich da jetzt die letzte Zeile raus?
Einen Lösungsansatz schleppte mir Google an:
http://forum.de.selfhtml.org/archiv/2005/6/t108873/#m679045

Da hast Du Dich vertan, das ist Dein Archivposting :-)

Wie könntest Du Dein erstes Ziel erreichen?
Die Kommandozeile kennt die FOR-Anweisung, in einer Batchdatei in der Form:

FOR %%Variable IN (Satz) DO Befehl [Parameter]

Für Satz kannst Du auch die Ausgabe eines Befehls nehmen. Diesen musst Du in einfache Hochkomma setzen, und die Option /F verwenden, z.B:

FOR /F %%I IN ('DIR /O:D /B /S /A:D') DO Befehl [Parameter]

Wie kommst Du nun an die letzte Zeile?
Ganz einfach: Schreibe den Inhalt jeder Zeile in immer die gleiche Variable (genauer Umgebungsvariable). Dazu dient die Anweisung

SET

z.B. mit

FOR /F %%I IN ('DIR /O:D /B /S /A:D') DO SET VERZEICHNIS=%%I

schreibst Du jede Zeile der Ausgabe in die Variable VERZEICHNIS. Bei jedem Durchlauf überschreibst Du den alten Wert mit dem aktuellen. Am Schluss steht die letzte Zeile der Ausgabe Deines DIR-Befehls drin. Auf solche Variablen greifst Du später mit

%Variablenname%

zu.

Kontrolliere, ob das gewünschte Ergebnis drinsteht, mache eine Testausgabe mit

ECHO %VERZEICHNIS%

Angenommen, es liefe: Kann ich es überhaupt einfach mit in die Batch
schreiben? Ansonsten müsste ja erst die Batch-Datei das VB-Script starten und dieses wiederum die nächste Batch-Datei (wo ich wiederum keine Ahnung von hätte).

Somit kann das VB-Skript außen vor bleiben, in der Variable

VERZEICHNIS

steht das gewünschte drin.

Wenn ich nun endlich das gewünschte Verzeichnis allein in einer Text-Datei (z.B. thedir.txt) habe, wie lese ich es in mein FTP-Upload-Skript?

Lesen? Gar nicht, Du schreibst es!

Im nächsten Schritt erstellst Du Dein Upload-Skript batchgesteuert neu. Dazu verwendest Du den Befehl ECHO, den Du bereits oben kennengelernt hast und die Umleitungen in Dateien mit

> (in eine neue Datei)
    >> (Anhängen an eine bestehende Datei)

Wenn Du Deine "upload.txt" neu erstellt hast rufst Du im letzten Schritt das FTP-Kommando auf. Fertig.

Hier ein erster Code-Ansatz, der Dir den Umgang mit Variablen in der Batchprogrammierung ein wenig näher bringen will:

@ECHO OFF
REM Setze benoetigte Variablen
SET PFAD=c:\temp\v\ SET DATEI=\V000000.htm

REM Ermittle das Verzeichnis, das zuletzt geaendert wurde
REM Beachte: Die Variablen in der FOR-Anweisung bestehen aus einem Buchstaben
FOR /F %%I IN ('DIR /OD /B  %PFAD%*') DO SET VERZEICHNIS=%%I
ECHO %PFAD%%VERZEICHNIS%%DATEI%

REM  Baue upload.txt zusammen

REM Rufe ftp auf

Abschliessende Anmerkung: Du könntest noch

setlocal
    endlocal

verwenden, damit Deine Variablen lokal bleiben.

Freundliche Grüße

Vinzenz