PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schleifendifferenzierung



Miles
24.12.2005, 10:44
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.

Miles
24.12.2005, 13:50
Edit: Batch nicht mehr aktuell....

Miles
26.12.2005, 15:25
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

Miles
26.12.2005, 17:08
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

Miles
26.12.2005, 21:27
Edit: Batch nicht mehr aktuell!

felix000
26.12.2005, 22:45
Dann füg nach dem Programmstart ein 'goto ende' ein.

Miles
27.12.2005, 14:33
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.

Miles
27.12.2005, 14:59
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.

Miles
27.12.2005, 16:07
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.

Miles
27.12.2005, 19:00
Danke, hat sich alles erledigt! Funzt!

Gruß

Lukas

Miles
28.12.2005, 11:27
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??

skyfire
13.01.2010, 22:37
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...

skyfire
14.01.2010, 21:58
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.

skyfire
14.01.2010, 22:32
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ß

Miles
14.01.2010, 22:41
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

skyfire
15.01.2010, 18:26
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

Miles
15.01.2010, 18:31
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

skyfire
15.01.2010, 18:46
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ß

Miles
15.01.2010, 23:40
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...

Miles
16.01.2010, 00:09
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
)