Batch-Tokens in Autoit

  • Hallo zusammen,

    ich habe eine Frage zu Tokens (aus der Batchverarbeitung).

    Ich habe eine Batchdatei die ich gerne nach Autoit konvertieren würde. Das Problem ist bis dato scheitere ich daran kläglich.

    Hier die Batchdatei:

    Ok was das Script macht ist relativ einfach erklärt. Ich sichere mit Robocopy und schreibe mir Logs die ich damit auswerte und in
    eine neue Datei schreibe. Funkt auch soweit.

    Hier noch eine Beispielszeile aus dem Log:

    Zitat

    Dateien: 26 26 0 0 0 6

    Aber gerade die Problematik mit FOR /F in Verbindung mit Tokens bekomme ich einfach in Autoit nicht hin.
    Ich weiss noch nicht einmal wie ich die ganze Sache angehen soll. Habe halt erst vor kurzem mich mit AutoIt beschäftigt.
    Alle Vorschläge oder Anregungen sind herzlich willkommen. Bin echt am verzeifeln.

    Ich hoffe jemand kann mir helfen.

    Schon mal vielen Dank im vorraus.

    VG
    Supergrobi

  • Hallo Supergrobi,

    du solltest eine Demodatei einstellen und erklären was du machen möchtest, denn nicht jeder kann Batch programmieren. Mir ist diese Zeile

    Code
    or /f "tokens=3" %%i in ('findstr /C:"Dateien:" H:\testi\archiver.log') do set /a Copied+=%%i

    absolut unklar.

    Um eine Datei aus zu werten liest du sie am besten in ein Array:

    [autoit]

    _FileReadToArray

    [/autoit]

    um einen String in seine Bestandteile (Tokens?) zu zerlegen nimmst du

    [autoit]

    StringSplit

    [/autoit]

    mfg autoBert

  • Mein Vorschlag: lade die archiver.log hoch und wir werden sie entsprechend nach AutoIt konvertieren.

    Gruß vom Lehrling, ;)
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo zusammen,

    erstmal vielen Dank für die Rückmeldungen.

    @ CyRoX
    Ich werte momentan die Robocopy Logs von meinen Sicherungen aus und lasse sie mir per E-Mail zuschicken.
    Die Logs von RoboCopy in Deutsch sind die reine Zumutung. Da muß man sehen wie man sich die relevanten Infos rausziehen
    kann. Da sind viele Tabs, Leerzeichen, Umlautprobleme usw. drin

    Die wichtigen Infos für mich befinden sich in der Spalte "Dateien" und zwar dort wieviel Dateien kopiert, Übersprungen und ob Fehler dabei waren. Diese will ich auf einem Blick direkt sehen wenn ich z.B. die Mail mir anschaue. Steht dann halt z.B. im Body.

    autoBert
    for /f mit tokens wird am besten auf dieser Seite erklärt (bevor ich mich hier auslasse und mich verzettel und vielleicht
    auch noch DummTüch erzähle ^^ )
    http://www.robvanderwoude.com/ntfortokens.php

    Ja StringSplit kam mir auch schon in den Sinn ;)

    @ UEZ
    Beiliegend ein Beispiellog.

    Die Zeile mit "Dateien" ist die wichtige. Und hier die 2,3 und 5 Zahl !!.
    Diese sollen in Variablen rein. Alles andere was ich dann noch machen möchte ist dann wieder kein Problem. ;)

    VG
    Supergrobi

  • Hier eine Methode, wie du die Zahlen in ein Array bekommst:

    [autoit]


    #include <Array.au3>
    $aStatus = GetLogStatus(@ScriptDir & "\Beispiel.txt")
    _ArrayDisplay($aStatus)

    [/autoit][autoit][/autoit][autoit]

    Func GetLogStatus($sLogFile)
    Local $sLog = FileRead($sLogFile)
    If @error Then Return SetError(1, 0, 0)
    Local $aResults = StringRegExp($sLog, "\s*Dateien:\s*(\d+)\s*(\d+)\s*(\d+)\s*(\d+)\s*(\d+)\s*(\d+)\s*", 3)
    If @error Then Return SetError(2, 0, 0)
    Return $aResults
    EndFunc

    [/autoit]

    Du kannst jetzt die Werte aus dem Array auswerten.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • UEZ
    Klasse genauso wie ich es brauche. Wow so schnell geht das. :thumbup:

    [autoit]


    StringRegExp($sLog, "\s*Dateien:\s*(\d+)\s*(\d+)\s*(\d+)\s*(\d+)\s*(\d+)\s*(\d+)\s*", 3)

    [/autoit]

    Diese Zeile ist echt heftig für mich. Das muss ich mir mal in Ruhe ansehen. Ich versteh da nur Bahnhof.
    StringRepExp hatte ich mir noch gar nicht angesehen. Meine Ansätze wären definitiv, jetzt betrachtet, viel zu kompliziert
    gewesen und mit wesentlich mehr Code.

    Klasse danke nochmal und viele Grüße
    Supergrobi

  • Das ist denke ich einfacher zu verstehen und mach im Hintergrund nichts anderes als das StringRegExp:

    [autoit]

    #include <Array.au3>
    #include <String.au3>
    $aStatus = GetLogStatus(@ScriptDir & "\Beispiel.txt")
    _ArrayDisplay($aStatus)

    [/autoit][autoit][/autoit][autoit]

    Func GetLogStatus($sLogFile)
    Local $sLog = FileRead($sLogFile)
    If @error Then Return SetError(1, 0, 0)
    $afinal = _StringBetween($sLog,"Dateien:","Bytes:")
    $afinal = StringStripWS($afinal[0],4)
    $afinal = StringSplit($afinal," ",3)
    Dim $aResults[3] = [$afinal[2],$afinal[3],$afinal[5]]
    Return $aResults
    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ja das verstehe ich wesentlich besser. Danke dir. Werde mir aber trotzdem mal das ganze von UEZ anschaun.
    Man lernt ja immer dazu ;)