# CMD Schleife programmieren



## amdnox (17. März 2010)

Hallo zusammen 
Ich habe früher mal sehr viel PHP programmiert aber seit 2 Jahren habe nix mehr gecodet und naja jetzt habe ich en Problem für das ich ein CMD Code brauch also frag hier mal um Hilfe.

Die sache sieht so aus ich habe einen System Prozess der Beendet werden kann der sich dann aber alle 5 sek. wieder neu Läd  keine ahnug wie das geht ist mir auch egal. Ich will diesen System Prozess aber für eine Gewisse zeit (15 min) Ausschalten. 

Jetzt habe ich mir gedacht ne Bat datei die denn Prozess in einer Schleife so lange beendet bis ich die bat datei beende.

Kann mir jemand dabei helfen so etwas zu erstellen kann auch ne exe sein


----------



## Jellysheep (17. März 2010)

So programmierst du eine Schleife in Batch:

```
:a
dein Code mit killProzess o.ä.
goto a
```
Statt a kannst du natürlich beliebige Labels verwenden.


----------



## Nico Graichen (17. März 2010)

Hi

Ist ungetestet, aber vom  Prinzip her sollte es so gehen

```
@echo off  
set a="true"  
:loop  
NET STOP ProcessToStop
echo "Process stopped"
SLEEP 300
if %a%=="true" goto loop
```


----------



## amdnox (17. März 2010)

Hey Nico könntest du das für mich mal schnell testen ob es so geht ? 
Ich nutz linux und kann es hier nicht Testen ich brauch das für die Arbeit und da komme ich erst morgen wieder hin.


----------



## Jellysheep (18. März 2010)

@Nico:
Die _sleep_-Funktion gibt es bei mir leider nicht (ich benutze XP Home). Ist die bei XP Pro oder Vista oder Win7 dabei?
_net stop_ beendet eigentlich nur Dienste. Prozesse kann man damit bei mir nicht beenden. 
Was du mit der Variable bezwecken willst, ist mir unklar... 
Sie wird doch nie auf false gesetzt. 

@amdnox: 
Wenn du nicht XP Home verwendest, müsstest du eigentlich auch die TaskKill.exe installiert haben, damit kannst du Prozesse beenden. Wenn du XP Home hast, kannst du dir eine kompatible Version davon herunterladen.


----------



## Nico Graichen (18. März 2010)

Jellysheep hat gesagt.:


> @Nico:
> Die _sleep_-Funktion gibt es bei mir leider nicht (ich benutze XP Home). Ist die bei XP Pro oder Vista oder Win7 dabei?


Ups, SLEEP wie folgt abgebildet werden (am Besten in einer eigenen Batch-Datei in System32):

```
@echo off
choice /c:xy /t:x,%1 > NUL
```
Diese kann dann über 

```
CALL SLEEP 300
```
aufgerufen werden
findet man aber auch alles im Netz


Jellysheep hat gesagt.:


> _net stop_ beendet eigentlich nur Dienste. Prozesse kann man damit bei mir nicht beenden.


Dienste sind auch Prozesse! Und da nicht angegeben war was für ein Prozess hab ich als Beispiel das genommen


Jellysheep hat gesagt.:


> Was du mit der Variable bezwecken willst, ist mir unklar...
> Sie wird doch nie auf false gesetzt.


geb ich dir recht, kann man auch weglassen


----------



## deepthroat (18. März 2010)

Hi.





Nico Graichen hat gesagt.:


> Ups, SLEEP wie folgt abgebildet werden (am Besten in einer eigenen Batch-Datei in System32):
> 
> ```
> @echo off
> ...


Choice gibt's aber bei WinXP auch nicht mehr. ^^

Man könnte ping auf localhost verwenden. 

Gruß


----------



## amdnox (18. März 2010)

Also ich bin mir nicht Sicher ob es Prof oder Home ist ich tippe aber mal auf Prof. die sache ist ja das selbst wenn diesen Prozess killer er nach 5 sek. wieder kommt ohne das was mache.


----------



## Nico Graichen (18. März 2010)

Wenn es nicht grad ein Virus ist, hat das Bestimmt sein Sinn, dass der Prozess neustartet.
Windows Update, Virenscanner u.a. machen das zum Beispiel so!


----------



## amdnox (18. März 2010)

Ja klar hat das einen Sin :-D der Dienst gehört zu einem Programm welches Daten über ein Funk Netz empfängt und mir Anzeigt und das ist Sehhhhr Bremsend für denn Rechner ich kann es ja auch komplett Ausschalten aber dazu muss ich PC neustarten und das will ich nicht ich will ja nur dann an haben wenn ich es auch wirklich brauche sonst leuft es ja im Hintergrund.


----------



## Nawi0 (19. März 2010)

Fals ihr das noch immer braucht ich hätte da eine Löseung jedoch wird das Programm ca alle 5 sec Beendet

es wird 15 min ausgeführt und dann wird mit einem akustischen signal ( simples Beep) darauf aufmerksam gemacht und gefragt ob es nochmal 15 min laufen soll

die zeit bis zur nachfrage kann man mit der variable C ändern

bei mir gehts wunderbar ich habs mit solitär getestet 


```
@echo off
goto start
:home
echo <Bel>* Nochmal 15 minuten? (J)a/(N)ein
set /p antwo=
if %antwo% == J goto start
if %antwo% == Ja goto start
if %antwo% == j goto start
if %antwo% == ja goto start
if %antwo% == N goto exit
if %antwo% == Nein goto exit
if %antwo% == n goto exit
if %antwo% == nein goto exit
goto home
:start
set a=%time:~+3,-6%
set C=15
set /a d=%a%+%c%
:abschn
color 0a
cls
echo *
sleep 1 >nul
cls
echo **
sleep 1 >nul
cls
echo ***
sleep 1 >nul
cls
echo ****
sleep 1 >nul
cls
echo *****
sleep 1 >nul
set a=%time:~+3,-6%
Rem Achtung bei den Processnamen auf Groß und klein schreibung achten
kill Prozessname.exe
if not %a% EQU %d% goto abschn
goto home
:exit
exit
```

*: Dieses zeichen kann in diesem forum leider nicht angezeigt werden =/
ich glaub man nennt es ANSI 007(alt gedrückt halten + numblock 0+7 ;alt loslasen)


inalt anhang: 
kill.bat
kill.exe
Sleep.exe


----------



## Clund (30. März 2010)

Hallo,
ich habe hier eine ganz andere Idee:
Hol dir Powershell (Ist eine Erweiterung von CMD)

http://www.microsoft.com/downloads/...FamilyID=30125A46-B97C-4704-AA10-605E809D5933

hier kann man ganz einfach mit for- und while-Schleiffen Programmieren

Gruß
Cpp-Freak


----------



## Nico Graichen (30. März 2010)

Cpp-Freak hat gesagt.:


> Hallo,
> ich habe hier eine ganz andere Idee:
> Hol dir Powershell (Ist eine Erweiterung von CMD)


Hi

Die Powershell ist keine Erweiterung des CommandShell sondern eine komplett eigenständige Shell, die lediglich aufgrund der Umgewöhnung die Befehle der CMD-Shell unterstützt (ähnlich VB und VB.NET).


----------



## Clund (30. März 2010)

ja, ja ich weiß.
man kann es auch kompeliziert sehen!!


----------

