6741
17.07.2006, aktualisiert am 18.07.2006
5881
19
0
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 ???
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 ???
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 36155
Url: https://administrator.de/contentid/36155
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
19 Kommentare
Neuester Kommentar
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
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
Hallo,
Mit dem ping kann man eine Pause machen - Ein Sleep gibt es noch im Ressource Kit oder mit zusätzlichen Kommandozeilentools.
Ein
Axel
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
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
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?
Axel
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?
Axel
@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
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
@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]
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]
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
Rein für Anhaltswerte (ohne Angabe von Standardabweichung, Mittelwertten oder sonstigem staistischen Kram):
Hier mal die Ausgabe mit dem Time-Kommando (aus CYGWIN):
Ich denke, die Formel kommt recht gut hin.
Wo kann man den Thread jetzt schliessen ??
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
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 ??
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
Frage:
Hast du
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
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
...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:
...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
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