jk87
Goto Top

Fragen rund um Bat-Befehle

Ja, ja ich bins wieder einmal der "ForenDurchForster"!

Möchte das meine Batch-Datei den Bat-Vorgang nur durchführt wenn der PC in einem bestimmten Netz ist. zB durch pingen eines proxy

Wie kann ich das machen, dass die Batch-Datei dauernt (vom Start des Computers an) nach dem Proxy sucht und nur wenn sie Ihn findet den Vorgang durchführt und falls sie den Vorgang durchgeführt hat und der Proxy wieder verschwindet (nicht mehr Vorhanden ist) das dann ein andere Befehl durchgeführt wird?

Ist das möglich und frist das eh nicht zuviele von der Rechenpower?

THX, for all answers!

JK

Content-ID: 16577

Url: https://administrator.de/contentid/16577

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

FaBMiN
FaBMiN 23.09.2005 um 11:40:01 Uhr
Goto Top
schreibs ins logonscript von dem jeweiligen Netz
JK87
JK87 23.09.2005 um 12:39:32 Uhr
Goto Top
Wie meinst du das?
Gibt es nicht die Möglichkeit das mit Batch zulösen?

JK
FaBMiN
FaBMiN 23.09.2005 um 13:05:55 Uhr
Goto Top
Besitzt Du einen Server auf dem die Profile liegen?
Lord-Helmi
Lord-Helmi 23.09.2005 um 13:10:05 Uhr
Goto Top
Hallo,

du könntest über den Zeitplandienst deine Batch-Datei regelmäßig starten lassen. Diese Batchdatei sendet dann einen Ping an eine bestimmte IP-Adresse und schreibt das Ergebniss in eine Textdatei.

Mittels einer For-Schleife kannst du nun diese Textdatei analysieren und gucken, ob dein Ping erfolgreich war und dann den entsprechenden Befehl ausführen lassen.

> Beispiel <------
ping xxx.xxx.xxx.xxx >iplog.txt
for /F "skip=3 tokens=1,2,3,4" %%a in (iplog.txt) do set iptest=%%d

If not %iptest%==Zielnetz goto yes
goto no

:yes
net send %username% erfolgreich!
goto ende

:no
net send %username% erfolglos!
goto ende

:ende
> Beispiel Ende <------

Gruß
Michael
FaBMiN
FaBMiN 23.09.2005 um 13:11:18 Uhr
Goto Top
Zitat wenn der PC in einem bestimmten Netz ist gehts nicht darum?
Lord-Helmi
Lord-Helmi 23.09.2005 um 13:15:34 Uhr
Goto Top
Hallo,

nach der Beschreibung bin ich einfach mal davon ausgegangen, dass der Proxy, welchen er anpingen möchte, aus einem anderen Netz heraus nicht erreichbar ist.

Habe ich da was falsch vertstanden?

Gruß
Michael
JK87
JK87 23.09.2005 um 15:49:19 Uhr
Goto Top
Nein, du musst das so sehen, als wäre ich ein Client.
JK87
JK87 23.09.2005 um 15:51:08 Uhr
Goto Top
Mit dem proxy kann man ganz normal ins internet er ist somit erreichbar!

Hat noch jemand einen anderen vorschlag ausser anpingen?

JK
Lord-Helmi
Lord-Helmi 24.09.2005 um 07:32:11 Uhr
Goto Top
Hallo,

vielleicht beschreibst du uns mal etwas genauer, was du machen willst. Um welchen Proxy geht es und wann ist/soll er erreichbar sein?

Gruß
Michael
JK87
JK87 24.09.2005 um 10:16:44 Uhr
Goto Top
Wie gesagt, ich möchte das die Batchdatei nur dann ausgeführt wird wenn der Proxy (also eine bestimmte IP, zB 10.10.0.1) verfügbar ist.
Und wenn er nicht Verfügbar ist soll er einen anderen Befehl ausführen.

thx

JK
Lord-Helmi
Lord-Helmi 25.09.2005 um 08:07:04 Uhr
Goto Top
Hallo,

genau dies macht das von mir als Beispiel angegebene Script. Es sendet einen Ping an eine bestimmte IP-Adresse und schreibt das Ergebniss des Ping's in eine Datei mit dem Namen iplog.txt.

Dann läuft eine for-Schleife über die so erstellte Datei drüber und schreibt den 4. Wert einer jeden Zeile in eine Variable mit dem Namen iptest. Da der Wert bei Erfolg und Mißerfolg des Ping's unterscheidet, wird die Variable jetzt mit dem Wert verglichen, der bei einem erfolglosen Ping zurückgegeben worden wäre.

Stimmen die beiden Werte nicht überein, geht das Script zur Sprungmarke yes für einen erfolgreichen Ping, andernfalls zu no für nicht erfolgreich.

Es werden dann die unter der jeweiligen Sprungmarke angegebenen Befehle ausgeführt.

Das ganze habe ich unter NT 4.0 erstellt, sollte mit kleinen Änderungen aber auch auf 2k und XP laufen. Du musst dir nur die Ausgaben, die vom Script in die Variable iptest geschrieben werden, ansehen und das Script dann insoweit abändern.

Gruß
Michael
JK87
JK87 27.09.2005 um 09:43:12 Uhr
Goto Top
Erstmal Danke.

Hab nur das Problem, dass die Datei ab der 4. Zeile dann auch immer die 4. Werte übernimmt!
Wie kann ich die Datei so schreiben, dass die 1-3 und ab der 8. Zeile die Werte ignoriert werden.

Nochmals Danke, sieht wirklich sehr gut aus nur etwas langsam aber ist verkraft bar wenn es keine andere Möglichkeit gibt.

thx

JK
Biber
Biber 27.09.2005 um 18:22:17 Uhr
Goto Top
Moin JK87,

ich würde es an dieser Stelle nicht so kompliziert machen.
In Lord_Helmi's Beispielbatch eine Zeile vorschalten:
bzw.

Wenn Du lieber diesen FOR-Befehl oben verwenden möchtest, dann reicht trotzdem ein einmaliges "Ping" (also Parameter n 1).
Und die überzähligen Zeilen entsorgst Du eben mit dem Find-Befehl (s.o.).

Aber tun sollte es auch die Zeile von mir... Du willst ja von dem Proxy nur wissen, ob er erreichbar ist und nicht seine Lebensgeschichte und sein Sternzeichen.

Frank / der Biber aus Bremen
[Edit]Die For-Zeile stimmt nur sinngemäß, siehe Berichtigung unten.[/Edit]
JK87
JK87 28.09.2005 um 10:22:30 Uhr
Goto Top
@all answers: thx for all


JK
Biber
Biber 28.09.2005 um 19:30:11 Uhr
Goto Top
Moin JK87,

sorry, gestern abend hat Werder gespielt, da hab ich wohl ein paar Klammern falsch gesetzt, weil ich mit den Gedanken woanders war.
Als ich eben grad noch einen Blick auf den Unsinn von gestern geworfen hatte, musste ich selber lachen.

Also, zur Richtigstellung:
Folgende Anweisung belegt nur unnötigerweise kostbaren Plattenplatz:
(läuft immer in die "do (goto yes)"-Anweisung; der ODER-Fall kann nie erreicht werden)
Ist natürlich Schwachsinn, so wie die Klammern gesetzt sind. Bitte nie in einem Multiple-Choice-Test an der VHS so was ankreuzen.

Richtiger:
(Wenn im Ping-Output "Antwort" gefunden wird, dann ist er Online, wenn nicht "goto no")

*Peinlich, sowas...
..und jetzt schreib ich mir erst mal einen Batch, der 100x schreibt:
Ich werde keine ungetesteten Oneliner mehr posten!
Ich werde keine ungetesteten Oneliner mehr posten!
Ich werde keine ungetesteten Oneliner....

Biber
JK87
JK87 28.09.2005 um 19:55:52 Uhr
Goto Top
Macht ja nichts!
Ist ja nichts passiert!

JK
JK87
JK87 29.09.2005 um 16:58:24 Uhr
Goto Top
Hab noch Probleme!

Wie kann ich mehrere Befehle bei yes/no ausführen lassen und falls einer nicht funktioniert, dass dieser einfach übersprungen wird?
Kann man den Proxy in einer INI-Datei angeben (Proxy=10.10.0.1) welcher von dort dann zum pingen importiert wird?

Danke im voraus.

JK
Biber
Biber 29.09.2005 um 23:32:27 Uhr
Goto Top
nAbend JK87,
so viele Fragen...
> Wie kann ich mehrere Befehle bei yes/no ausführen lassen...
Indem Du sie untereinander in "Blöcken" gruppierst. Siehe unten.

>.... und falls einer nicht funktioniert, dass dieser einfach übersprungen wird?
Ist ein Widerspruch. Geht nur eins von beiden *gg
Ich vermute, Du meinst, wenn ein Fehler auftritt, willst Du nicht, dass er auf den Bildschirm durchschlägt?
Falls Du das meinst: Alle Ausgaben und Fehlermeldungen ins Nirwana lenken ( ">nul" )
und selber prüfen, ob alles ok ist (Errorlevel ist 0, d.h. ein &&-UND-Befehl wird ausgeführt ) oder
Beispiel auch unten beim Ping.

>Kann man den Proxy in einer INI-Datei angeben (Proxy=10.10.0.1) welcher von dort dann zum pingen importiert wird?
Ja. Schmucklose Variante:
In einer Textdatei genau EINE Zeile nur mit der IP.
---Beispiel Inhalt c:\meineconfig\MyIP.txt
10.10.0.1
---ende Inhalt c:\config\MyIP.txt

Im Batch diesen Inhalt in eine Variable namens MeineIP lesen...
--- Beispielbätch1.Bat
...
Set /p MeineIP=&ltc:\config\MyIP.txt
...
(Ping -n 1 %meineIP% | find "Antwort" >nul) || goto MeineIPOffline  
::wenn der batch hier ankommt, war kein Fehler.. also Online
:MeineIPOnline
...(AnweisungAWennOnline )
...(AnweisungBWennOnline )
...(AnweisungCWennOnline)
::---- Ende Block MeineIPOnline
goto ganzweitunten

:MeineIPOffline
Echo IP %MeineIP% ist nicht erreichbar!
...(Fehlerbehandlung)...
...
::---Ende Block MeineIPOffline
goto ganzweitunten
....
... (Jahre später...)
...
:ganzweitunten
...(Aufräumarbeiten, z.B. Variablen oder Tmp-Dateien löschen)
Set MeineIP=
....
::EndOfTheWorld
::-------ende BeispielBätch1.bat

Bisschen schönere Variante einer Ini-Datei c:\config\meineIPs.ini
---Inhalt--
[AlleIPs]
StandardIP=10.10.0.1
ErsatzIP=10.10.80.3
SchmuddelIP=0.190.666.666
...
Ende c:\config\meineIPs.ini

Lesen der Variablen im Batch (bei Bedarf):
---- beispielbatch2.bat
...
...
Set meineIP=0.0.0.0
call :IpTest StandardIP
if Errorlevel 1 call :IpTest ZweitIP
if Errorlevel 1 call :IpTest DrittIP
if Errorlevel 1 call :IpTest SchmuddelIP
if errorlevel 1 goto HatKeinZweck
:: ... die Vorzeile tritt in Aktion, wenn alles scheitert. 
:: Sonst kannst Du in der nächsten Zeile weiterbätcheln
echo Verwende jetzt IP %meineIP%, denn die funktioniert!
...
... (weitere Aktionen)
...

goto :eof
...
...
:IpTest
(type meineips.ini|find /i "%1" >nul) || goto :eof  
::die Vorzeile läuft auf Fehler und RETURNt, wenn kein Wert %1 (z.B. StandardIP, in der *ini-Datei steht
for /f "tokens=1,2 delims==" %%i in ('type meineips.ini^|find /i "%1"') do Set MeineIP=%%j  
Ping -n 1 %meineIP% | find "Antwort" >nul  
:: jetzt ist Errorlevel=0, wenn ping Erfolg hatte, sonst <>0. Auswertung oben
goto :eof
-------- ende beispielbatch2.bat 

HTH & HANN
Biber

[Edit] Die Zeile "Set /p MeineIP=.." hat hat es natürlich zerrissen.. HTML-Tags..
jetzt ist der Rest der Zeile sichtbar. Sorry. [/Edit]
JK87
JK87 30.09.2005 um 09:28:19 Uhr
Goto Top
thx

Ist es nicht möglich, dass Daten von einer INI-Datei in eine Batchdatei importiert werden kann (zB Proxy=10.10.0.1, Port=8080, import nur immer der Werte)?

.... und falls einer nicht funktioniert, dass dieser einfach übersprungen wird?
Meinte ich so, dass nicht abgebrochen wird wenn ein befehl nicht funktioniert oder eine Datei nicht gefunden wurde!

JK
Biber
Biber 30.09.2005 um 13:28:14 Uhr
Goto Top
@JK87
Ist es nicht möglich, dass Daten von einer INI-Datei in eine Batchdatei
importiert werden kann (zB Proxy=10.10.0.1, Port=8080, import nur immer der Werte)?

Siehe oben... der Import ist nicht das Problem. Aber Du willst ja vermutlich diesen Proxy dann auch per CMD-Zeile aktivieren? Spätestens dafür mach bitte einen neuen Thread auf face-smile

>.... und falls einer nicht funktioniert, dass dieser einfach übersprungen wird?
Meinte ich so, dass nicht abgebrochen wird wenn ein befehl nicht funktioniert oder eine
Datei nicht gefunden wurde!

Wie geschrieben.. im Batch (oder jedem anderen Codefetzen) bestimmst Du, ob bei Fehler abgebrochen wird, ob Du den Benutzer mit Fehlermeldungen belästigst oder selbst eine Fehlerbehandlung/einen Alternativweg wählst.

Einige Progrämmchen, die ich zusammengeschrotet habe, bestehen sicherlich zu 40% aus Fehlerbehandlungen... und diese Größenordnung wird es immer, wenn Du selbst im Programm alle Eventualfälle abdecken willst. Einfacher wird es nur, wenn Du den armen Endbenutzer immer ganz dreist fragst, was das Programm jetzt (bei Fehler) tun soll.
So wie M$ es gerne macht. Dann kannst Du im Zweifelsfall immer den Anwender zusammenfalten, wenn etwas in die Grütze geht ("Du hättest doch da nicht OK drücken dürfen, sondern Abbrechen! Nun ist alles kaputt wegen Dir..")