Jump to content

rybog

Members
  • Gesamte Inhalte

    9
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von rybog

  1. Hallo,
    genau das, was du vorgeschlagen hast, diese kleine Änderung meines Skripts, erwarte ich von einem Forum. Abgesehen davon, dass deine Änderung nicht richtig funktioniert (anscheinend hast du sie nicht getestet), hast du mir einen Denkanstoß gegeben, um es richtig zu machen.

    @echo off
    mode 30,3
    color 74
    echo.
    set /p "input=Zeit in Minuten eingeben: %"
    set /a time=%input%-1
    cls
    echo.
    echo Sie haben noch %input%'00" Zeit!
    ping -n 2 localhost > nul
    cls
    for /l %%x in (%time%,-1,0) do (
        for /l %%y in (59,-1,0) do (
            echo.
            if %%y gtr 9 (
                < nul set /p "=Sie haben noch %%x'%%y" Zeit!"
            ) else (
                < nul set /p "=Sie haben noch %%x'0%%y" Zeit!"
            )
            ping -n 2 localhost > nul
            cls
        )
    )

    Vielen Dank und Gruß

  2. Hallo,
    da ich bis jetzt keine Hilfe bekommen habe, die man in einem Forum normalerweise erwartet, habe ich letztendlich eine Uhr selbst gebastelt. Der Code sieht zwar für mich schrecklich aus (an einer Optimierung muss ich noch arbeiten), auf dem Bildschirm aber, fängt die angezeigte Zeit bei X'00" an, und endet bei 0'00". Und genau das wollte ich erreichen. Am Ende kommen noch fünf Pieptöne dazu. Selbst ist der Mann!

    @echo off
    title CountDownTimer by rybog
    mode 30,3
    color 74
    echo.
    set /p "input= Zeit in Minuten eingeben: %"
    cls
    setlocal EnableDelayedExpansion
    for /l %%x in (%input%,-1,0) do (
        if %%x gtr 0 (
            for /l %%y in (60,-1,1) do (
                echo.
                if %%y equ 60 (
                    < nul set /p "= Sie haben noch %%x'00" Zeit."
                ) else (
                    if %%y gtr 9 (
                        set /a min=%%x-1
                        < nul set /p "= Sie haben noch !min!'%%y" Zeit."
                    ) else (
                        < nul set /p "= Sie haben noch !min!'0%%y" Zeit."
                    )
                )
                ping -n 2 localhost > nul
                cls
            )
        ) else (
            echo.
            < nul set /p "= Sie haben noch %%x'00" Zeit."
            ping -n 2 localhost > nul
            cls
        )
    )
    for /l %%x in (1,1,5) do (
        echo •
        ping -n 1 localhost > nul
    )

    @daabm
    Ich habe nichts gegen deinen Vorschlag, nur, so zu machen, wie du es vorschlägst, kann ich leider noch nicht. Ich würde mich aber sehr freuen, wenn du es zeigst, wie man in meinem ersten Skript deinen Vorschlag verwirklichen kann. Oder zeige es bitte, wie man es mit einer anderen Formulierung machen kann. Übrigens, eine andere Sprache soll es nicht sein, sonst hätte ich einfach irgendeine Shareware-Uhr genommen.

    Gruß

  3. Hallo,

    ich habe bereits verschieden Varianten ausprobiert, die zu keinem brauchbaren Ergebnis geführt haben. Deshalb habe ich hier meine Frage gestellt, in der Hoffnung, dass den verbalen Ratschlägen praktische Beispiele folgen.
    Obwohl mein momentanes Können, in der Batch-Programmierung, Grenzen für die Lösung meines Vorhabens setzt, bin ich der Meinung, dass die Aufgabe als Batch-Skript machbar ist (nicht unbedingt in der von mir vorgeschlagenen Form). Ich Hoffte, dass sich hier eingefleischte Batch-Profis finden, die mein Problem als Herausforderung sehen würden und es lösen. Dabei könnte ich und die anderen Mitleser meines Beitrags wieder etwas lernen.

     

    Gruß

  4. Hallo,
    wenn ich auf der Eingabeaufforderung für meinen Count Down Timer eine Zahl für Minuten eingebe, z.B. 7, dann fängt der Timer ab 6'59" an. Ich möchte aber, dass er ab 7'00" anfängt. Hat jemand eine Idee, wie man es erreichen kann?

    @echo off
    mode 30,3
    color 74
    echo.
    set /p input=Zeit in Minuten eingeben: %
    set /a time=%input%-1
    cls
    for /l %%x in (%time%,-1,0) do (
        for /l %%y in (59,-1,0) do (
            echo.
            if %%y gtr 9 (
                < nul set /p "=Sie haben noch %%x'%%y" Zeit!"
            ) else (
                < nul set /p "=Sie haben noch %%x'0%%y" Zeit!"
            )
            ping localhost -n 2 > nul
            cls
        )
    )

    Gruß

  5. Hallo Daniel,

     

    Volltreffer! Es funktioniert!

    Vielen, vielen Dank! Ich muss nur noch das Skript in Windows XP testen (Ja, ja, ich weiß. Es wird nicht mehr von Microsoft unterstützt.).

     

    Und hier noch das ganze Skript für die, die vielleicht etwas davon lernen möchten:

    @echo off
    setlocal enabledelayedexpansion
    cd /d %1
    if not exist %~n1.mnu (
        echo %~n1> %~n1.mnu
        echo #>> %~n1.mnu
        echo #>> %~n1.mnu
    )
    for /f %%x in ('dir /b /l /o:n *.') do (
        find /i "/%%x" %~n1.mnu
        if !errorlevel!==1 (
            echo /%%x>> %~n1.mnu
            echo #>> %~n1.mnu
            echo #>> %~n1.mnu
        )
    )
    for /f "tokens=1-2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.mfg.* *.drw.* *.gph.* *.sec.* *.spl.* *.tbl.* *.sym.*') do (
        find /i "%%x.%%y" %~n1.mnu
        if !errorlevel!==1 (
            echo %%x.%%y>> %~n1.mnu
            echo #>> %~n1.mnu
            echo #>> %~n1.mnu
        )
    ) 

    Gruß

  6. Hallo,
    leider ändert sich dadurch nichts.

    Die Anweisung FIND funktioniert tadellos nur der ERRORLEVEL ist immer „0“ bei gefundenen und nicht gefundenen Dateinamen. Ich habe zusätzlich eine Bildschirm-Ausgabe für den ERRORLEVEL eingefügt, um es zu verdeutlichen.

    @echo off
    cd /d %1
    if not exist %~n1.mnu (
       echo %~n1> %~n1.mnu
       echo #>> %~n1.mnu
       echo #>> %~n1.mnu
    )
    for /f "tokens=1,2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
        find /i "%%x.%%y" %~n1.mnu
        echo %errorlevel%   <-- Nur zum Testen der ERRORLEVEL-Ausgabe auf dem Bildschirm
        if "%errorlevel%"=="1" (
            echo %%x.%%y>> %~n1.mnu
            echo #>> %~n1.mnu
            echo #>> %~n1.mnu
        )
    )
    cmd /k   <-- Nur zum Testen der ERRORLEVEL-Ausgabe auf dem Bildschirm
  7. Hallo,

    ich habe mir ein BATCH-Skript geschrieben, das mit einer Verknüpfung vom Ordner „SendTo“ aufgerufen wird und folgende Aufgabe bewältigt:

    Ein Ordner wird nach bestimmten Dateien durchsucht (*.prt.* *.asm.* *.drw.*) und die gefundene Dateinamen werden in eine MNU-Datei geschrieben.

    Das Skript:

    @echo off
    cd /d %1
    echo %~n1> %~n1.mnu
    echo #>> %~n1.mnu
    echo #>> %~n1.mnu
    for /f "tokens=1-2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
       echo %%x.%%y>> %~n1.mnu
       echo #>> %~n1.mnu
       echo #>> %~n1.mnu
    )
    

    Das Ergebnis in der MNU-Datei:

    archive   <-- Name des durchsuchten Ordners
    #
    #
    datei1.prt
    #
    #
    datei2.prt
    #
    #
    datei3.prt
    #
    #
    datei1.asm
    #
    #
    datei2.asm
    #
    #
    datei3.asm
    #
    #
    datei1.drw
    #
    #
    datei2.drw
    #
    #
    datei3.drw
    #
    #
    

    Ich wollte noch zwei Bedingungen einfügen, die überprüfen:
    - ob eine MNU-Datei im Ordner bereits vorhanden ist, und
    - ob neue Dateien dazugekommen sind.

    Wenn ja, dann soll das Skript die Erstellung der MNU-Datei überspringen und in die vorhandene MNU-Datei nur die Dateinamen einfügen, die neu dazugekommen sind.

    Die erste Aufgabe war leicht (siehe die 3. Zeile).
    Die zweite Aufgabe in der FOR-Schleife bereitet mir Schwierigkeiten.
    Ich habe eine Syntax in der 9. Zeile geschrieben, um es zu verdeutlichen, was ich erreichen möchte.

    @echo off
    cd /d %1
    if not exist %~n1.mnu (
       echo %~n1> %~n1.mnu
       echo #>> %~n1.mnu
       echo #>> %~n1.mnu
    )
    for /f "tokens=1-2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
       if find /i "%%x.%%y" %~n1.mnu goto found   <--Diese Syntax ist natürlich falsch, zeigt aber mein Vorhaben.
       echo %%x.%%y>> %~n1.mnu
       echo #>> %~n1.mnu
       echo #>> %~n1.mnu
       :found
    )
    

    Kann mir bitte jemand einen Tipp geben, wie ich es bewerkstelligen könnte?

    Gruß

     

    === EDIT===

     

    Hallo,
    ich habe einen Ansatz gefunden. Ich überprüfe jedes mal, ob es eine gegebene Datei gibt.

    @echo off
    cd /d %1
    if not exist %~n1.mnu (
       echo %~n1> %~n1.mnu
       echo #>> %~n1.mnu
       echo #>> %~n1.mnu
    )
    for /f "tokens=1-2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
        find /i "%%x.%%y" %~n1.mnu
        if %errorlevel%==1 (
            echo %%x.%%y>> %~n1.mnu
            echo #>> %~n1.mnu
            echo #>> %~n1.mnu
        )
    )
    

    Leider funktioniert die Anfrage "if %errorlevel%==1" nicht wie gewünscht. Das heißt, ich möchte wissen, ob "find" auch etwas gefunden hat.
    In der Batch-Konsole dagegen funktioniert diese Abfrage wunderbar. Warum dieser Unterschied?

×
×
  • Neu erstellen...