Suche eine Batch die...

spoll

Cadet 2nd Year
Registriert
März 2022
Beiträge
19
Hallo zusammen ,

ich habe schon Einiges versucht.

u.a das hier :

@Echo off

:loop
timeout /t 1 > NUL
if exist "C:\Users\Name\Desktop\LS\BOS-Tool\*.tmp" (
start "" "C:\Users\Name\Desktop\LS\sound\sprechtaste Leistelle.wav"
) else (

start "" "C:\Users\Name\Desktop\LS\sound\sprechtaste Leistelle loslassen.wav"
)

goto loop


Die Batch erfüllt aber nicht meine Ansprüche !

Ich suche eine Batch, die in einem Ordner nach einer TMP-Datei sucht, wenn diese Gefunden ist, wird eine bestimmte Sounddatei abgespielt. ( Die Sounddatei ist 2 min lang) Diese muss nicht in Dauerschleife laufen.
Wenn sich in dieser Zeit der Name der TMP ändert, oder Diese aus dem Ordner verschwinden, soll noch 2 Sekunden gewartet/überprüft werden bis der Sound nicht mehr abgespielt wird.
Wenn diese TMP-Datei nach der Überprüfung dann aus dem Ordner verschwindet, soll ein anderer sound abgespielt werden.
Aber nur einmal, nicht in Dauerschleife.

Wer kann mir helfen ?

schonmal vielen DANK !
 
Ich will ja nicht den Lehrer spielen, aber ein State-Diagramm mit Übergangsbedingungen würde helfen.
Du musst dir in jedem Fall eine Variable erzeugen in der du dir merkst ob der End-Sound bereits abgespielt wurde.
Den Rest verstehe ich nur halb, aber es geht dir wohl um eine Verzögerung bzw. minimale Abspieldauer des Start-Sounds. Kannst du z.B. über die Abfrage der Systemzeit und ein paar Variablen lösen.
 
Wenn du den Timeout ans Ende der Loop machst funktioniert es doch schon.......fast.
Dir fehlt halt noch eine Abbruchbedingung. Und, die Batch wartet natürlich nicht auf das Ende des wav Files sondern startet den Sound nach der Wartezeit einfach erneut.

So habe ich es bei mir getestet:
Bash:
@Echo off

:loop
if exist "C:\Temp\*.tmp" (
start "" "C:\Temp\Alarm01.wav"
) else (

start "" "C:\Temp\Alarm02.wav"
)

ping 127.0.0.1 -n 3 > nul

goto loop
Ergänzung ()

Ganz pragmatisch sollte es so bereits tun:
Bash:
@Echo off

set playing=false

:loop
if %playing% == false (
    if exist "C:\Temp\*.tmp" (
        start "" "C:\Temp\Alarm01.wav"
        set playing=true
    ) else (
        start "" "C:\Temp\Alarm02.wav"
        goto end
    )
) else (
    if not exist "C:\Temp\*.tmp" (
        start "" "C:\Temp\Alarm02.wav"
        goto end
    )
)

ping 127.0.0.1 -n 3 > nul

goto loop

:end

Eine Frage besteht aber noch: Was passiert, wenn die tmp Datei am Ende vom ersten Sound immernoch existiert? Du bekommst ja nicht mit, wenn das Soundprogramm fertig ist mit abspielen. Das bedeutet, das Skript beendet sich dann nicht von selbst.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mKstan
SaxnPaule schrieb:
Wenn du den Timeout ans Ende der Loop machst funktioniert es doch schon.......fast.
Dir fehlt halt noch eine Abbruchbedingung. Und, die Batch wartet natürlich nicht auf das Ende des wav Files sondern startet den Sound nach der Wartezeit einfach erneut.

So habe ich es bei mir getestet:
Bash:
@Echo off

:loop
if exist "C:\Temp\*.tmp" (
start "" "C:\Temp\Alarm01.wav"
) else (

start "" "C:\Temp\Alarm02.wav"
)

ping 127.0.0.1 -n 3 > nul

goto loop
Ergänzung ()

Ganz pragmatisch sollte es so bereits tun:
Bash:
@Echo off

set playing=false

:loop
if %playing% == false (
    if exist "C:\Temp\*.tmp" (
        start "" "C:\Temp\Alarm01.wav"
        set playing=true
    ) else (
        start "" "C:\Temp\Alarm02.wav"
        goto end
    )
) else (
    if not exist "C:\Temp\*.tmp" (
        start "" "C:\Temp\Alarm02.wav"
        goto end
    )
)

ping 127.0.0.1 -n 3 > nul

goto loop

:end

Eine Frage besteht aber noch: Was passiert, wenn die tmp Datei am Ende vom ersten Sound immernoch existiert? Du bekommst ja nicht mit, wenn das Soundprogramm fertig ist mit abspielen. Das bedeutet, das Skript beendet sich dann nicht von selbst.


Super funktioniert. Die Batch funktioniert, ABER nur wenn ich diese Starte, und bereits die TMP vorhanden ist. Ich möchte das die Batch am Anfang von mir manuell gestaret wird und dann den Ordner beobachtet
 
spoll schrieb:
Ich möchte das die Batch am Anfang von mir manuell gestaret wird und dann den Ordner beobachtet
Das hast du aber nicht gesagt und auf meine Frage diesbezüglich bist du auch nicht eingegangen. Du hast eine fast fertige Lösung bekommen, jetzt streng dich auch mal etwas an.
 
  • Gefällt mir
Reaktionen: NotNerdNotDau, BFF, redjack1000 und eine weitere Person
sorry !
Ergänzung ()

SaxnPaule schrieb:
Wenn du den Timeout ans Ende der Loop machst funktioniert es doch schon.......fast.
Dir fehlt halt noch eine Abbruchbedingung. Und, die Batch wartet natürlich nicht auf das Ende des wav Files sondern startet den Sound nach der Wartezeit einfach erneut.

So habe ich es bei mir getestet:
Bash:
@Echo off

:loop
if exist "C:\Temp\*.tmp" (
start "" "C:\Temp\Alarm01.wav"
) else (

start "" "C:\Temp\Alarm02.wav"
)

ping 127.0.0.1 -n 3 > nul

goto loop
Ergänzung ()

Ganz pragmatisch sollte es so bereits tun:
Bash:
@Echo off

set playing=false

:loop
if %playing% == false (
    if exist "C:\Temp\*.tmp" (
        start "" "C:\Temp\Alarm01.wav"
        set playing=true
    ) else (
        start "" "C:\Temp\Alarm02.wav"
        goto end
    )
) else (
    if not exist "C:\Temp\*.tmp" (
        start "" "C:\Temp\Alarm02.wav"
        goto end
    )
)

ping 127.0.0.1 -n 3 > nul

goto loop

:end

Eine Frage besteht aber noch: Was passiert, wenn die tmp Datei am Ende vom ersten Sound immernoch existiert? Du bekommst ja nicht mit, wenn das Soundprogramm fertig ist mit abspielen. Das bedeutet, das Skript beendet sich dann nicht von selbst.
Die TMP wird automatisch aus dem Ordner gelöscht,wenn das Programm BOS_Tool keinen Sound mehr abspielt
 
Zuletzt bearbeitet:
@sikarr, leider bin ich noch nicht zu dieser Lösung gekommen. Kannst du mir da weiterhelfen ?
 
1+2 . Die Batch funktioniert, ich möchte nur das diese nach dem manuellen starten automatisch auf eine neue TMP reagiert.
2. nein muss es nicht
3. möglich, weiß ich nicht.
4. dann wird der Sound nicht mehr abgespielt
 
Darf ich raten: der Sprengsatz sind die Länge der WAVs und das TIMEOUT.
Ich habe das nachgebaut, und die WAVE wird immer wieder gestartet bevor sie durch ist.

Im Prinzip aber bleibt die Frage wer nun diese *.TMP da ablegt oder wieder löscht.
Tue ich das manuell flutscht die Batch wie sie soll.

µb
 
Die Frage wer die TMP ablegt und löscht habe ich bereits beantwortet;). Das macht ein Tool von sich aus selbst.
Ergänzung ()

cumulonimbus8 schrieb:
Darf ich raten: der Sprengsatz sind die Länge der WAVs und das TIMEOUT.
Ich habe das nachgebaut, und die WAVE wird immer wieder gestartet bevor sie durch ist.

Im Prinzip aber bleibt die Frage wer nun diese *.TMP da ablegt oder wieder löscht.
Tue ich das manuell flutscht die Batch wie sie soll.

µb
Darf ich raten: der Sprengsatz sind die Länge der WAVs und das TIMEOUT.
Ich habe das nachgebaut, und die WAVE wird immer wieder gestartet bevor sie durch ist.

Was meinst du damit ?
 
Dann muss es laufen wie es ist.
Bei mir tut es.
Also, wie du schon gefragt wurdet - wo crasht es?

CN8
 
Erst wenn eine TMP im Ordner vorhanden ist und ich in dieser Zeit die Batch startet macht es was es soll.
Ich möchte aber die Batch nicht jedesmal dafür selbst starten
 
spoll schrieb:
3. möglich, weiß ich nicht.
Na dann los. Da braucht man dann nur die einzelnen Zustände bzw -übergange übernehmen. Fertig!

Dann braucht man dir auch nicht alles aus der Nase ziehen, sondern kann sich stumpf an das Diagramm halten.
 
Kenn ich mich leider nicht mit aus. Ich möchte darauf hinweisen, das ich mich mit programmieren überhaupt nicht richtig auskenne.
 
Du sollst ja auch nichts programmieren. Weißt du was ein State-Diagramm ist? Nein? Hast du mal die Suchmaschine deiner Wahl dazu befragt?

Ich machs dir leicht:
https://www.mikrocontroller.net/articles/Statemachine
https://studyflix.de/informatik/endliche-automaten-1210
https://medtech-ingenieur.de/zustandsautomaten-modellieren-ein-blick-in-die-uml-und-sysml/

Danach nimmst du dir Zettel und Stift, malst den Spaß auf, machst ein Foto davon und lädst es hier hoch. Oder du nimmst dir Draw.io und klickst den Spaß fix online zusammen (https://app.diagrams.net/)
 
  • Gefällt mir
Reaktionen: spoll
Zurück
Oben