[BATCH] FOR, eine Zeile auslesen

  • Hallo,
    ich habe eine Datei, wo ich eine bestimmte Zeile auslesen möchte.
    Aber ich bekomme nicht nur meine Zeile 82, sondern auch alle anderen die nach 82 folgen.

    Die Zeilen 83 und folgende möchte ich aber nicht mit ausgeben lassen,
    damit ich nur meine Zeile 83 in einer Set-Variable speichern kann.

    Soweit bin ich schon gekommen:

    Code
    FOR /F "skip=82 delims=" %%i IN (index.html) do echo %%i

    [edit:]
    - die Datei ist "http://haali.cs.msu.ru/mkv/index.html"
    - ich versuche das aktuelle Datum auszulesen (Zeile 83)

  • Tja, das geht so zunächst mal nicht anders. Hier ein Auszug aus dem "HELP":

    Code
    FOR /F ['Optionen'] %variable IN (Dateiensatz) DO Befehl [Parameter]FOR /F ['Optionen'] %variable IN ('Zeichenkette') DO Befehl [Parameter]FOR /F ['Optionen'] %variable IN (`Befehl`) DO Befehl [Parameter]    Der Dateiensatz besteht aus einem oder mehreren Dateinamen. Jede Datei    wird geöffnet, gelesen und bearbeitet, dann wird mit der nächsten Datei    des Satzes fortgefahren. Die Bearbeitung einer Datei erfolgt zeilenweise,    jede einzelne Textzeile wird ausgewertet und in die entsprechenden Token    (keinen oder mehrere) zerlegt. Die Befehle in der FOR-Schleife werden dann    mit den Variablenwerten (d.h. den gefunden Zeichenketten bzw. Token)    aufgerufen. [B]Standardmäßig liefert /F den ersten, durch ein Leerzeichen    getrennten Token von jeder Zeile[/B] in jeder Datei. Leerzeilen werden    übersprungen. Das standardmäßige Verhalten bei der Analyse kann wahlweise    durch den Parameter "Optionen" überschrieben werden. Das ist eine    Zeichenkette in Anführungszeichen, welche eines oder mehrere Schlüssel-    wörter enthält, um verschiedene Parameter für die Analyse anzugeben. Diese    Schlüsselwörter sind:        eol=c           - Gibt das Zeichen für Zeilenendekommentare an                          (nur eins).        [B]skip=n          - Gibt die Anzahl der Zeilen an, die am Anfang einer                          Datei übersprungen werden.[/B]        delims=xxx      - Gibt einen Satz von Trennzeichen an. Diese ersetzen                          die Standardtrennzeichen TAB und Leerzeichen.

    Für DOS kann ich Dir auch keine Lösung nennen:hm:
    Falls Du Linux bzw. Cygwin hast, könnte Deine Lösung so aussehen:

    Code
    $ cat index.html | awk 'BEGIN {a=1}{if(a == 83){print $0};a+=1}'
    [I]Ergebnis:[/I]      <li>03/06/2007
  • Moin,

    Zitat

    - ich versuche das aktuelle Datum auszulesen (Zeile 83)<!-- / message --><!-- sig -->



    Gehe ich recht in der Annahme, daß es darum geht, per "Auto-script" regelmäßig zu schauen, ob es eine neuere Version gibt?

    Wie kommst Du drauf, daß das wiederkehrend in Zeile 83 zu finden ist/wäre?

    Die Zeile 83 auszuwerten ist kein Problem, aber funktionieren wird das auf Dauer jedenfalls sicher nicht!

    Gruß Karl

  • Gehe ich recht in der Annahme, daß es darum geht, per "Auto-script" regelmäßig zu schauen, ob es eine neuere Version gibt?
    ...

    Ja und noch mehr, ich möchte damit mein "Haali Media Splitter"-Installer mit ein Doppelklick updaten.
    Wenn ich das Datum auslesen könnte, werde ich ihn auch in den Namen schreiben...

    Eine kleine Schwäche hat das Script, dazu muss Haali die Seite komplett ändern. (das ist aber nicht das Problem)


    Wie gesagt, hat einer eine Idee wie ich eine Zeile aus ein Html-Dokument auslesen kann...?

  • Du hast meine übrigen Fragen nicht beantwortet - wie soll da ein sinnvoller Lösungsvorschlag kommen?

    Vorschlag: Wenn die Seite sowieso angeapsst werden soll oder wird - einen Tag vereinbaren, dar immer die neueste Version quasi "brandmarkt" - diesen tag dann auswerten...

  • Der Karl
    bitte mach keine Probleme, wo noch keine sind...

    zur Frage, wie ich darauf komme, dass das Datum immer auf Zeile 83 ist.
    Das muss es nicht.

    Ich durchsuche Haali's seite nach "Changes"

    Code
    for /F "delims=:" %%i in ('findstr /n "Changes" .\haali\index.html') do set /a ZLine=%%i


    und dann gebe ich den Abstand zum Datum an der 2 Zeilen entfernt ist an.

    Code
    set /a ZlineP2=%Zline%+2

    Wenn ich jetzt nur noch dieses Datum richtig auslesen könnte,
    wäre alles andere kein Problem.

  • Zitat

    bitte mach keine Probleme, wo noch keine sind...



    Nicht ich erfinde Probleme, sondern DU hats schlicht nötige Infos nicht gegeben. Ich halte aber auch diese Mittel nur für begrenzt tauglich...
    ..und nun hab ich keine Lust mehr..

  • Die "Beweggründe" sind mir absolut wurscht. Es ist ja wohl ein riesen Unterschied, ob ich aus einer Datei die Zeile 82 auswerten will, oder diese auf einem anderen Weg suche und finde und dann davon Inhalte auswerten will.

    Insofern ist die "Aufgabenstellung" schlicht irreführend!

    Ich habe ungefähr 25 Kilometer solcher scripte, die in den letzten 10 Jahren entstanden sind und auch sowas ist ganz sicher darunter. Bevor ich mir die Arbeit mache und den ganzen Kram durchsuche und evtl. extra was schreibe, ist es ja wohl absolut legitim, zu fragen, was überhaupt das Ziel ist und ob es evtl. auch einen besseren Ansatz gibt...

    ..aber Jeder wie er will...

  • Auch ich finde, dass das größte Problem bei solchen Skripten Annahmen sind, die alles andere als sicher sind, und schon kleine Änderungen vollkommenen Unsinn ergeben können.

    Wie liest man HTML-Dateien richtig ein? -- Tja, eigentlich braucht man einen HTML-Parser, der einen DOM-Baum erstellt... Eindeutig zu kompliziert für BATCH.

    Die kooperativste Lösung (was die Mitarbeit von Haali voraussetzt) wäre, Datumsangeben und Links zu aktuellsten Versionen in Tags mit IDs zu setzen, z.B.

    HTML
    <span id="releasedate">2007-06-11</span>
    
    
    <a href="..." id="releasefile">...</a>

    Dann hätten HTML-Parser (wie PHP 5 sie beispielsweise bietet) eine gute Chance. Aber nicht BATCH.

  • ...ich habe eher den Verdacht, daß es an den fehlenden "0D" am Zeilenende liegt - die "Dos-Werkzeuge" mögen sowas nicht besonders, genausowenig wie ANSI...

  • moin,
    testet mal awk,damit geht einmal alles.ich hänge hier mal paar unix tools an,die auf dos portiert wurden.läuft unter dos und allen windosen. inhalt:
    awk.exe 176kb
    cat.exe 15kb
    egrep.exe 40kb
    grep.exe 40kb
    head.exe 13 kb
    splitf.exe 14kb
    tail.exe 17kb
    vi.exe 34kb

    sehr hilfreich kann ich nur sagen ;)

    infos zu awk:
    http://www.uni-regensburg.de/EDV/Unix_Works…ipt/node36.html

    http://www.clug.in-chemnitz.de/vortraege/awk/

    http://www.linuxfibel.de/awk.htm

    g/l

    Dateien

    md "%date%_%time:~0,2%.%time:~3,2%.%time:~6,2%"
    ...........................................................................................
    [X] <---- hier bitte bohren für neuen monitor.

  • ich habe es (endlich) geschafft...
    ich habe mein UpdateScript für den Haali Media Splitter fertiggestellt.

    wer es haben will, brauch es nur Herunterladen...

    -es wird Wget benötigt
    -im Script muss der Wget-Pfad angepasst werden
    -das Script arbeitet überall (ich habe es ins HalliSplitter-Verzeichnis kopiert)

  • geht das auch mit einer INI datei?


    Also batch schreibt in zeile 2 Nils und beendet die batch

    Jetzt möchte ich die batch starten und es soll da stehen "hallo Niels" wie geht das ?

    (kenne mich mit for schleifen noch nicht so gut aus!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!