1. #1
    Avatar von DotNet
    Registriert seit
    10.06.2015
    Beiträge
    661
    Thanked 316 Times in 185 Posts

    Standard Funktion mit Parameter in Batch-Script

    In einer Batch-Datei möchte ich mir an mehreren Stellen Statuseinträge auf dem Bildschirm ausgeben lassen. Diese sollen einheitlich formatiert sein, z.B. mit aktuellem Datum und Uhrzeit. Damit ich das nicht immer kopieren muss, würde ich das gerne in eine Funktion auslagern. Das stellt mich vor ein großes Problem, weil Batch keine Funktionen zu kennen scheint. Mein Ansatz war eine Sprungmarke zusammen mit einer globalen Variable, die den Log-Text enthält. Vor dem Sprung wird die globale Variable auf den Text gesetzt und ausgegeben.

    Das funktioniert, nur bringt es ein weiteres Problem mit sich: Durch den Sprung wird der Verlauf meines Scriptes unterbrochen. Ich müsste aus der Log-Sprungmarke anschließend wieder zurück in den normalen Ablauf springen. Von der Login her ist dies natürlich nicht möglich, weil ich dafür wissen müsste, von wo aus sie aufgerufen wird.

    Um das Problem besser deutlich zu machen ein kleines Beispiel:
    Code:
    @echo off
    set log=""
    echo Programmanweisung1
    set log="Testeintrag"
    goto Log
    echo Nächste Programmanweisung
    
    :Log
    echo %log%
    
    pause
    Erzeugt folgende Ausgabe:
    Code:
    Programmanweisung1
    "Testeintrag"
    Drücken Sie eine beliebige Taste . . .
    Wie man sieht wird die Anweisung nach der Log-Sprungmarke aber übersprungen. Ich benötige in diesem Beispiel folgende Ausgabe:
    Code:
    Programmanweisung1
    "Testeintrag"
    Nächste Programmanweisung
    Drücken Sie eine beliebige Taste . . .
    Ist so etwas in der einfachen Batch-Sprache überhaupt möglich, oder habe ich keine Wahl als die Log-Anweisung immer zu kopieren? Die Alternative Powershell möchte ich nicht so gerne wählen, weil mein Script im Autostart platziert werden soll. Mit der Powershell ein Script automatisch zu starten ist schon ein Graus wenn man es in eine externe Datei verlagert, weil standardmäßig alle Scripte signiert sein müssen. Das in den Autostart zu bekommen dürfte daher ein Graus werden, wahrscheinlich muss die Ausführungsrichtlinie über GPOs gesetzt werden und solche Späße. Da ist mir auch aus dem Grund nicht wohl bei, weil die Richtlinie dann für alle Scripte gelten dürfte.

    Ein Batch-Script würde für meine Anforderungen auch voll ausreichen, den Funktionsumfang der Powershell brauche ich nicht. Nur für die Bildschirmausgabe wäre eine zentrale Logfunktion schön, um nicht immer kopieren zu müssen. Außerdem spart man sich Arbeit, wenn das Format mal geändert werden soll (z.B. detailliertere Zeitangabe mit ms).

    Im Krieg gibt es keine Gewinner, nur Verlierer!

  2. #2

    Registriert seit
    09.11.2011
    Beiträge
    121
    Thanked 129 Times in 46 Posts

    Standard AW: Funktion mit Parameter in Batch-Script


  3. #3
    Avatar von CDLF
    Registriert seit
    28.03.2013
    Beiträge
    384
    Thanked 198 Times in 133 Posts

    Standard AW: Funktion mit Parameter in Batch-Script

    Der Link von Brainy liefert nach ein bisschen lesen zwar das gewünschte Ergebnis, aber hier ein bisschen technischer und direkter.

    Zitat Zitat von DotNet Beitrag anzeigen
    Wie man sieht wird die Anweisung nach der Log-Sprungmarke aber übersprungen.
    Sie wird sogar wortwörtlich übersprungen, weil GOTO einfach zu einer Marke führt und von dort aus weiter macht.

    Durch CALL lässt sich dies umgehen. Wird die Sprungmarke durch CALL aufgerufen (und nicht "angesprungen"), kann mit goto :eof ans Dateiende gesprungen, wodurch der Aufruf (engl.: CALL) endet und mit der nächsten Anweisung weitergemacht.

    Beispiel:
    Spoiler:
    Code:
    @echo off
    
    echo 1
    call :mtrg
    echo 4
    echo 5
    pause
    exit
    
    :mtrg
    echo 2
    echo 3
    goto :eof
    
    echo 6
    Liefert die Ausgabe:
    1
    2
    3
    4
    5
    Geändert von CDLF (26.03.2016 um 23:11 Uhr)

  4. The Following User Says Thank You to CDLF For This Useful Post:

    DotNet (23.04.2016)

Ähnliche Themen

  1. Batch mit Maus bedienen???
    Von Testgamer100 im Forum Andere
    Antworten: 3
    Letzter Beitrag: 04.02.2016, 20:42
  2. (.bat) Batch Tutorial
    Von MC Phlegmatisch im Forum Tutorials
    Antworten: 0
    Letzter Beitrag: 31.03.2012, 13:35
  3. Antworten: 0
    Letzter Beitrag: 19.03.2012, 21:56
  4. [Mathe] Parameter bestimmen
    Von Jeffrey im Forum Bildung
    Antworten: 10
    Letzter Beitrag: 13.01.2012, 20:25
  5. [Shell Script]Upload Script (7z & ncftp)
    Von Sq252 im Forum Showroom
    Antworten: 0
    Letzter Beitrag: 08.01.2012, 18:12
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.