6741
Goto Top

Problem mit einer Batch Datei

Hallo,

wenn ich z.b. in einer Batch Datei notepad.exe aufrufe, dann läuft die Batch Datei erst weiter, wenn ich das Programm notepad schliesse.
Das gleiche wäre für den Explorer oder den calc.

Wie kann man diesen "Stop" umgehen ???

Content-Key: 36155

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: Biber
Biber Jul 17, 2006 at 12:32:02 (UTC)
Goto Top
Moin fwd,

mach den Aufruf in der *.bat-Datei mit
Start "wattuwillst" notepad.exe

-bzw-

Start x:\pfad\meinNeuer.txt

(wenn zum Beispiel *.txt-Dokumente bei Dir standardmäßig mit Notepätt.exe aufgerufen werden würden).

Hilfe zum Start-Befehl vom CMD-Prompt aus mit
Start /?

Gruß
Biber
Mitglied: 6741
6741 Jul 17, 2006 at 12:40:53 (UTC)
Goto Top
uiii

fine ..

ein hab ich noch ...

ich möchte einen Prozess abfragen ist der da, dann solls weiter gehen ....

z.b. ist notepad geöffnet ( überprüfen ) dann mail schreiben ( z.b. mit sendmail.exe )

wie kann ich den Prozess abfragen ??
Member: AxelHahn
AxelHahn Jul 17, 2006 at 13:22:15 (UTC)
Goto Top
Wenn ein neueres Win da ist (vielleicht auch ab Win2000 ?? - weiss ich jetzt nicht):
Das Tool wird dir helfen
%WINDOR%\system32\tasklist

In dessen Ausgabe mit findstr ab Zeilenanfang suchen:
tasklist.exe | findstr "^mein_Programm" && goto gefunden
echo Programm wird derzeit nicht ausgefuehrt.
goto ende

:gefunden
echo Das Programm ist gestartet.
(...)

Axel
Member: rc-computer
rc-computer Jul 17, 2006 at 13:25:07 (UTC)
Goto Top
Hi,

mit dem befehl `tasklist' siehst du die laufenden Prozesse

@echo off

:: Beispielsweise explorer.exe
tasklist | find /i "explorer.exe" > nul  

:: wenn explorer.exe "existiert" dann "mach dies"  
if %errorlevel% == 0 (
	echo mach dies
)
Mitglied: 6741
6741 Jul 17, 2006 at 13:32:42 (UTC)
Goto Top
jetzt müsste ich nur noch eine Schleife haben ...

die immer wieder überprüft ob der prozess da ist

wenn da dann zum punkt da, wenn nicht dabb wieder von vorne ( evtl ein kleinen Wait ( 30-60sec ))

okay bin etwas weiter ...

_______________________________________________________________________

:start
@ echo off
tasklist.exe | findstr "abc" && goto gefunden
echo Programm wird derzeit nicht ausgefuehrt.
goto start

:gefunden

echo Das Programm ist gestartet.


goto start

_______________________________________________________________________

jetzt müsste ich noch ein wait einsetzen, gibt es aber unter XP nicht was kann man alternative einsetzen ... ???

so ca. 60 sec Warten ...
Member: AxelHahn
AxelHahn Jul 17, 2006 at 14:14:11 (UTC)
Goto Top
Hallo,

Mit dem ping kann man eine Pause machen - Ein Sleep gibt es noch im Ressource Kit oder mit zusätzlichen Kommandozeilentools.

Ein ping /n 31 localhost >nul ... wartet 30 Sekunden - also so:


:loopstarttasklist.exe | findstr "^mein_Programm" && goto gefundenecho warte 30 sec ...ping /n 31 localhost >nulgoto loopstartecho Programm wird derzeit nicht ausgefuehrt.goto ende:gefundenecho Das Programm ist gestartet.(...)


Axel
Mitglied: 6741
6741 Jul 17, 2006 at 14:24:51 (UTC)
Goto Top
danke ...

nette Hilfe ...

warum steht der Wert auf 31 und nicht auf 30 gibt es da einen Grund ???

manmal steht da "Das Programm ist gestartet"

und dann wieder der Prozess ... abc.exe xxxx Console 0 3.555k usw

etwas komisch .. teste mal selbst
Member: Biber
Biber Jul 17, 2006 at 14:28:32 (UTC)
Goto Top
warum steht der Wert auf 31 und nicht auf 30 gibt es da einen Grund ???

Mengenrabatt.
Du packst ja auch 31 Fragen in einen Beitrag...

Wahre Antwort: Ping.exe ist ja eigentlich nicht zum Zeitmessen/Pause machen konzipiert.
Irgendeine Computerzeitschrift hat das mal aufgeschnappt und darauf hingewiesen, dass eine halbe Minute mit ping.exe warten nicht exakt 30,000 Sekunden ( = Dreissigtausend Millisekunden) bedeutet.
Wenn man/frau denn sichergehen wollte, dass tatsächlich mindestens 30 Sekunden um sind, dann: eine Sekunde MEHR angeben.

Und Generationen haben es nachgeplappert...
Kannst auch 28 hinschrieben oder 33.... wird auch mal genau treffen.

Biber
Member: AxelHahn
AxelHahn Jul 17, 2006 at 14:31:15 (UTC)
Goto Top
Hallo,

der ping erfolgt unter Win jede Sekunde einmal. Der erste Ping sofort. Daher ist bei n Sekunden Pause (n+1) mal das Ping auszuführen.

http://www.axel-hahn.de/axel/page_compi/bat_tipps.htm#wait


OT:
Das ist etwa so die klassische Knobelaufgabe: der Dr. verschreibt 10 Tabletten - ich soll jeden halben Tag eine nehmen. Wie lange reichen die Tabletten?
face-smile

Axel
Member: AxelHahn
AxelHahn Jul 17, 2006 at 14:42:13 (UTC)
Goto Top
@Biber:
Klar ist ping eine absolute Krücke, aber die einzige Hilfe mit Windows-Boardmitteln eine Pause einzulegen (aus der Default-CD-Installation heraus - RK schleift das sleep ja mit).

Ich weiss schon, warum ich mir die Bash installiert habe. Aber das führt jetzt hier zu weit ...

Axel
Mitglied: 6741
6741 Jul 17, 2006 at 14:43:40 (UTC)
Goto Top
wäre die Frage wann du beim Arzt warst ... ;>)))

rennt prima

Danke !!!
Member: Biber
Biber Jul 17, 2006 at 14:48:56 (UTC)
Goto Top
@Axel:

So sehr ich Deine Homepage schätze... das glaube ich nicht.

Rein theoretisch mag das (analog zum Tabletten-Einwerfen) stimmen, aber das es im (annähernd) genauen Sekundentakt funktioniert, ...niemals.

Ich sach: ping mir 31x.
Ping sacht: OK.
Ping pingt (nach dem Starten und dem OK-Sagen...also bei t+Vierzehntelsekunden).
Der Ping geht über 7 Brücken... ist erledigt nach weiteren 3einhalb Zehntelsekunden.
Zeit steht bei t+Vierzehntel+Dreieinhalbzehntel.
Wie lang wird jetzt bis zum nächsten Pingen gewartet??
Bis t+1sek?
Oder bis t+0,75 Sek + 1 Sek??

Grüße
Frank

[Edit]
P.S. Inzwischen haben auch die beiden anderen geantwortet...
@Axel: Nicht falsch verstehen .. ich wäre der Allerletzte, der M$-Software in Schutz nimmt.
Dafür hab ich Zeugen hier im Forum... *gg
[/Edit]
Member: AxelHahn
AxelHahn Jul 17, 2006 at 15:11:40 (UTC)
Goto Top
ich denke, wir sind uns da einig:
wenn man etwas artverwandtes wie Zeitmessung braucht (oder auf Performance achten muss), sollte man Batchlösungen knicken. Bei der Wartezeit von 30 Sek ist es egal, ob man nun 27 oder 38 schreibt - es bleibt "etwa" eine halbe Minute und fertig.
Es ging nur ums Prinzip - bei Wartepausen von 2..5 Sekunden kann man mit dem Verfahren (n+1) Sekunden arbeiten. Bei einer halben Minute oder was auch immer kann man sich so seinen groben Werten in die Zeile setzen. Das spielt selbstverständlich keine Rolle mehr.

btw:
Unter Windows kann man gar nicht im Tausendstel-Sekunden-Bereich messen. gettickcount gibt zwar etwas in Millisekunden zurück, aber das System ist so getaktet, dass man Abtastraten von ca. 25 ms hat. Bei deiner Messung (oder Ausgaben unten) bitte aufpassen face-wink

Rein für Anhaltswerte (ohne Angabe von Standardabweichung, Mittelwertten oder sonstigem staistischen Kram):
Hier mal die Ausgabe mit dem Time-Kommando (aus CYGWIN):
bash-2.05b$ time ping /n 10 localhost >nulreal 0m9.057suser 0m0.015ssys 0m0.015sbash-2.05b$ time ping /n 20 localhost >nulreal 0m19.055suser 0m0.015ssys 0m0.015sbash-2.05b$ time ping /n 30 localhost >nulreal 0m29.052suser 0m0.030ssys 0m0.000s

Ich denke, die Formel kommt recht gut hin.

Wo kann man den Thread jetzt schliessen ??
Member: Biber
Biber Jul 17, 2006 at 15:34:24 (UTC)
Goto Top
Wo kann man den Thread jetzt schliessen ??
Das kann in diesem Fall nur der Thread-Ersteller (der zielsicher seine Batch-Frage unter "Windows" gepostet hat) oder einer der Mods in diesem Bereich.

@fwd: Büdde nächstes Mal Batchkrams in "Batch & Shell" stellen...da hätte diese Diskussion viel besser gepasst...

"Windows" passt nicht so ganz 100%... ist so ähnlich wie in unserer Kantine.
Die sagen immer ganz überzeugend: "Bratensoße passt immer!"

Na ja, auf den Teller schon... aber auch das würde zu weit führen jetzt...

Schönen Nachmittag
Biber
Mitglied: 6741
6741 Jul 17, 2006 at 17:00:26 (UTC)
Goto Top
Hi @all ...

der weg führt zum ziel ...

Aufgabe mit wenig "Aufwand" erledigt ..

ne VB wäre mir auch lieber, kann ich aber nicht ...

gucke beim nächsten mal auch genau aufs Forum Sub Dir
Member: TheIch
TheIch Jul 17, 2006 at 17:34:55 (UTC)
Goto Top
schreib einfach ma start davor.... also start notepad.exe zum beispiel. ich würd sagen, dass das funktioniert

MfG

TheIch


verfdammt...erst lesen, dann posten. admin bitte löschen! tut mir leid, is schon spät heut
Mitglied: 6741
6741 Jul 18, 2006 at 06:24:15 (UTC)
Goto Top
Moin und Danke nochmals ...

würde gerne noch eine Bedingung klären ....

wie kann ich das Abfragen ?

wenn ein Prozess eine gewisse Speichergröße erreicht soll der Prozess gestopt bzw gekillt werden..

wer hat dazu eine Idee ?

Es gibt ein Programm bei uns das bleibt ab einen Speichernutzung von ca. 400MB stehen, ist das errreicht würde die die EXE killen.

Danke ...
Member: AxelHahn
AxelHahn Jul 18, 2006 at 06:55:15 (UTC)
Goto Top
Frage:
Hast du
%windir%\system32\tasklist /?

aufgerufen?? Hier stehen die Kriterien, nach denen du filtern kannst (Speicherverbrauch, CPU-Time, ...). Inklusive Vergleichsoperatoren grösser/ kleiner/ gleich/ ...
Beispiele liefert die Hilfe-Ausgabe auch.

Zum Beenden des Prozesses gibt es im selben Ordner die taskkill.exe. Bitte auch einmal mit /? aufrufen.

Schönen Tag noch!
Axel
Member: Biber
Biber Jul 18, 2006 at 06:57:33 (UTC)
Goto Top
...neue Frage, neuer Thread, fwd...

Setz bitte jetzt diesen Thread auf gelöst (unabhängig von der Brauchbarkeit meiner Antwort).

Unter dieser Überschrift in dieser Rubrik hat sonst kein(e) andere(r) eine Chance, hier eine passende Lösung für eigene Probleme zu finden, wenn Du immer wieder mit "Ach übrigens, da fällt mir ein..." neue Aspekte dranflanscht.

Im Batch:
 ....
for /f "tokens=6-7 delims=. " %%i in ('tasklist^|find /i "Speicherfresser.exe"') do if %%i%%j GEQ %Speichermax% kill "Speicherfresser.exe"  

...wobei "Speicherfresser.exe" der Name Deiner zu killenden *.exe-Datei ist und in der numerischen Variablen %SpeicherMax% vorher das Limit gesetzt wurde, z.B. so:

Set /a Speichermax=40000


Gruß
Biber