Archiv verlassen und diese Seite im Standarddesign anzeigen : Schleifendifferenzierung
Hallo zusammen!
Ich habe folgendes Problem:
Wir haben in unserer Feuerwehr insgesamt 3 Schleifen.
Wir wollen nun auch eine Alarm-SMS verschicken.
Dazu wollte ich eine Batch-Datei schreiben, habe auch schon angefangen, aber leider funzt das ned so wie ich es will.
Hier mal meine Idee:
wenn 1.schleife ausgelöst--warten auf weitere schleifen, wenn keine weitere schleife, dann sms, wenn 2.schleife dann warten ob 3.schleife, wenn nicht dann sms, wenn 2.schleife nicht und 1. und 2. schleife dann auch sms.
Hab die Batch-Datei geschrieben, aber irgendwie verschickt er mir dann immer ne sms, wurscht was ausgelöst wurde. Ausgelöst wird die Batch über FMS32, welches wiederum eine Batch startet, die dann in einem Ordner die dateien "schleife1.txt" etc. erzeugt. Diese Dateien sollen geprüft werden und dann nach alarmierungsbild die sms verschicken, ohne vielen Schnickschack.
Kann mir evtl. jemand einen Tipp für die Entwicklung geben bzw einen Programmiertext, bei mir kann ne goto verknüpfung irgendwie nur auf externe Dateien zugreifen.
Oder hat vielleicht soetwas schon irgendjemand mal gemacht?
Wäre nett wenn ihr mir helfen könntet!
Frohe Weihnachten!
Gruß
Miles
felix000
24.12.2005, 11:24
Poste bitte mal deine Batchdatei.
Edit: Batch nicht mehr aktuell....
Was ist los?
Seid ihr alle so mit brennenden Christbäumen beschäftigt, oder ist meine Batch so falsch, das man dazu überhautp nichts sagen kann?
felix000
26.12.2005, 15:46
Sorry, ich hab den Threat übersehen.
Ich versteh die Zeile überhaupt nicht: :a="wait5
Ich hab sowas bei mir auch laufen ich poste es mal:
@echo off
CD C:\Funk\IBSS
FOR /F "usebackq tokens=1,2,3 delims=: " %%a IN ('%time%') DO set zeit=%%a:%%b
if exist temp.txt goto schreiben
echo Alarmierung %Zeit% - Schleifen:
rem Text in der SMS vor den Schleifen
echo %1,>>temp.txt
wait 120
rem Wartezeit in der die 3 Schleifen ausgelöst werden können
find "12345" temp.txt
if %ERRORLEVEL%==0 goto senden
find "12346" temp.txt
if %ERRORLEVEL%==0 goto senden
find "12347" temp.txt
if %ERRORLEVEL%==0 goto senden
:schreiben
echo %1,>>temp.txt
goto ende
:senden
IBSS.exe ... /F:temp.txt
goto loeschen
:loeschen
if exist temp.txt del temp.txt
:ende
Das :a=wait5 geht weiter bis zum nächsten Anführungszeichen, d.h. es beeinhaltet die IF-Abfrage auchnoch.
Hab da nochmal einige Fragen zu deiner Batch-Datei:
1. Wenn alle 3 Schleifen ausgelöst werden, werden dann auch 3 sms verschick, bei 2 Schleifen 2 etc.
2. if exist temp.txt goto schreiben
.....
echo Alarmierung %Zeit% - Schleifen:
rem Text in der SMS vor den Schleifen
echo %1,>>temp.txt
:schreiben
echo %1,>>temp.txt
goto ende
Warum lässt du einen Text zweimal in den SMS-Inhalt schreiben?
Wenn die Datei temp.txt existiert, was sie wohl tut wenn alarmiert wird, soll etwas in die Datei geschrieben werden und wenn die Schleifen kommen dann auch nochmal. Kannst du mir bitte den Sinn erklären, irgendwas musst du dir wohl dabei gedacht haben.
3. Die Zeile mit dem FOR /f ist nur für die Zeit zuständig, wie ich das gesehen habe, oder wird da auch no sonst was abgerufen??
4. Bei mir wird sobald die Zeile gefunden wurde hingeschrieben das das Ereignis wahr ist, aber es löst das Programm nicht aus. Habe den Programmpfad geändert, weil meiner anders ist!
Danke für deine Hilfe und für deine Batch Datei
Grüße
Miles
Edit: Batch nicht mehr aktuell!
felix000
26.12.2005, 22:45
Dann füg nach dem Programmstart ein 'goto ende' ein.
Danke, das haut jetzt hin!
Aber wie löse ich das Problem, das wenn ich auch nur eine Schleife alarmiere, immer alle Programme gestartet werden, ich will aber nur das bei 2 schleifen 2 Programme, bei 1 Schleife 1 Programm und bei 3 Schleifen 3 Programme gestartet weden bzw sms verschickt werden??
felix000
27.12.2005, 14:49
Poste nochmal deine Batch.
Mein momentaner Stand is die die ich oben gepostet habe. Das ist ja im großen und ganzen deine, die nur ein wenig an meine Verhältnisse angepasst habe. Statt den Programmen bei send1, send2,send3 wird nun eine batch gestartet, die das SMS-Tool steuert. So läuft sie wunderbar, nur das oben geschilderte Problem lässt sich mir nicht erklären. Schau dir doch mal die Fragen an, die ich dir oben gestellt habe, villeicht liegt darin ja der Fehler, weil ich davon einen Teil einfach rausgelöscht habe, weil ich dachte das sei für mich irrelevant. Trotzdem super idee, mit dem suchen der Schleifen in der Textdatei!! Darin liegt m.E. auch irgendwo der Fehler! Finde ihn nur leider ned! :-(
Danke!
Miles
felix000
27.12.2005, 15:23
Ich würde es trennen, eine Batch für die SMS und eine andere für die Progamme, die gestartet werden sollen.
Allein schon wegen der Wartezeit in der SMS-Batch.
Die Programme laufen eh nur zum testen. Es soll dann ja das SMS- TOOL ausgelöst werden.
Warum starten alle Programme auch wenn nur eine oder zwei schleifen ausgelöst wurden??
felix000
27.12.2005, 16:49
Geh deine Batch nochmal durch, zum Beispiel des hier
if exist alarm.txt goto abbruch
...
:abbruch
goto ende
...
:ende
Wenn schon eine Schleife ausgelöst wurde, soll doch die Schleife trotzdem in der Datei stehen, damit du weißt welche Schleifen ausgelöst wurden. Bei dir wird aber ei einer weiteren Schleife die Batch sofort beendet ohne irgendwas zu tun.
Falls du ICQ oder Skype hast, meld dich mal per PN.
Danke, hat sich alles erledigt! Funzt!
Gruß
Lukas
So, soweit haut alles super hin. Habe jetzt Clemail am laufen und würde gerne den Inhalt der alarm.txt als email Inhalt mitschicken. Das auslesen einzelner Zeilen ist kein Problem, aber wenn ich die ganze Datei auslesen will, scheitert es bei mir. Welchen Befehl soll ich verwenden, damit mir der Textdateinhalt als %text% zur verfügung steht??
hallo,
ich weis die Beiträge sind schon etwas älter, aber hat jemand eine entgültige lösung? bzw batch??
mfg Skyfire
felix000
14.01.2010, 02:37
Meine von damals läuft immer noch...
ja okay, kannst du mal deine batch datei zeigen und erklären, für was die einzelen befehle sind weil ich steig da net ganz durch...
danke
mfg skyfire
felix000
14.01.2010, 22:22
In einer Konsole:
help befehl
Dann weißt du was die Befehle machen.
ja gut so weit bin ich auch gekommen, aber ich kann mir diese Zeilen nicht erklären
FOR /F "usebackq tokens=1,2,3 delims=: " %%a IN ('%time%') DO set zeit=%%a:%%b
if exist alarm.txt goto abbruch
echo %Zeit% Einsatz FF 1>>D:\sms\alarm.txt
@echo !!!Alarm FF Schleife 1!!!
echo Alarmierung %Zeit% - warte auf weitere Schleifen:
wait 10
was genau führen die aus?
gruß
ja gut so weit bin ich auch gekommen, aber ich kann mir diese Zeilen nicht erklären
FOR /F "usebackq tokens=1,2,3 delims=: " %%a IN ('%time%') DO set zeit=%%a:%%b
if exist alarm.txt goto abbruch
echo %Zeit% Einsatz FF 1>>D:\sms\alarm.txt
@echo !!!Alarm FF Schleife 1!!!
echo Alarmierung %Zeit% - warte auf weitere Schleifen:
wait 10
was genau führen die aus?
gruß
Die erste Zeile schreibt die aktuelle Zeit in die Variable Zeit, die du dann immer aufrufen kannst mit %zeit%.
Zeile 2 ist für den Ausschluss einer Doppelauswertung verantwortlich.
Zeile 3 schreibt schließlich Zeit und Schleife 1 in die Datei D:\sms\alarm.txt (wird erstellt, falls noch nicht vorhanden!).
Zeile 4 ist nur für die Orientierung in der Barch.
Schließlich wartet das Skript in noch 10 Sekunden auf weitere Alarmierungen.
Um endgültig auf deine Frage zu Antworten: Hab das Skript umfangreich erweitert, ein paar mal umgebaut und schließlich mit ner GUI geschrieben (andere Sprache, ohne Stapelverarbeitung, Batch deaktiviert), die auf unsere Feuerwehr angepasst ist. Ich versende mit der damaligen Idee inzwischen für 8 Schleifen mit BANI-SMS und SMS-Trade unsere Alarm-SMS.
Edit: Hab mal die alten Batch-Auszüge von der vorigen Seiten von mir gelöscht, weil die ziemlich verbugt waren. Also besser damit nicht arbeiten!
Grüße,
Miles
ja okay soweit hab ich es jetzt verstanden. kanst du mal deine entgültige version davon zeigen dann kann ich es an meine ansprüche anpassen...
danke
mfg skyfire
Meine endgültige Version ist aber nicht mehr mit Batch. Habs in C geschrieben. Wird dir also nicht viel bringen, weil das Skript nur auf unsere Feuerwehr angepasst ist....
Poste mal deine Batch, dann kann ich dir helfen,
Grüße,
Lukas
ja danke hab die batch gerade nicht zur hand aber wie instaliere ich die Funktion wait?
bei mir kommt immer der Fehler das diese Funktion nicht gibt...
gruß
Wait ist ansich keine Funktion, sondern ein kleines Tool (gibts hier im Forum, mal die Suche benutzen). Mit dem Aufruf wait *Blank* *Zeit in Sekunden* wird deine Batch um die angegebene Zeit pausiert. Also z.B.
IF EXIST C:\sms.txt goto warten
:warten
wait 100
goto ende
:ende
Wenn die Datei C:\sms.txt auf der C-Partition liegt, wartet die Batch 100s und beendet sich dann.
Wait eignet sich also z.B. um auf andere alarmierte Schleifen zu warten....
Wichtig ist der Blank (also Leerzeichen) zwischen wait und der Zeitangabe....
felix000
15.01.2010, 23:43
IF EXIST C:\sms.txt
wait 100
goto ende
:ende
Der Code stimmt aber nicht ganz...
War ja nur ein Beispiel... ;-)
IF EXIST "C:\sms.txt" goto warten
:warten
wait 100
goto ende
:ende
Ich hasse die goto-Verzweigungen, deswegen auch C und nicht mehr Batch! ;-)
felix000
16.01.2010, 00:18
Man kann ja auch Klammern:
if exist datei.txt (
echo 1
echo 2
) else (
echo 3
echo 4
)
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.