Kurzes einfaches Batch Script

kikyou2

Komplett-PC-Käufer(in)
Hi zusammen,

ich habe eigentlich nur eine kurze (An)Frage. Ich habe ein sehr kurzes Autoit Script welches ich einfach als Batch Script brauche. Viel macht das Script nicht aber das reicht

Code:
WinClose("ArmA 2 OA Console version 1.62 : port 2302", "")
Sleep (30000)
Run("C:\SERVER\DE 2471\arma 2 operation arrowhead\DE 2471.bat", "")
Exit

WinClose schließt das Fenster "ArmA 2 OA Console version 1.62 : port 2302" dann wartet das Script 30 Sekunden und starten diese Bat "C:\SERVER\DE 2471\arma 2 operation arrowhead\DE 2471.bat". Danach soll sich das Fenster schließen da das Script automatisch alle 6 Stunden gestartet wird.

Im Prinzip brauche ich also nur eine "Übersetzung" :D

Vielen Dank im Voraus!

Mfg kikyou2
 
Zuletzt bearbeitet:
Sind die Batch Script Befehle deckungsgleich mit den Autoit Befehlen?

Kenne mich mit den Batch Befehlen nicht aus und habe daher nur mein Autoit Script gepostet.
 
achsoooo. dein code is dieses auto dongsbums. ach jetz raff ich das ^^ gibts keine batch dokumentation? also run kenn ich von batch her auch. hmm
 
Programme schließen müsste mittels taskkill funktionieren: taskkill /f /im app.exe
Die Syntax für Fensternamen ist etwas fummelig, evtl. ist das mit dem Anwendungsnamen einfacher zu realisieren.

Sleep gibt es AFAIK so nicht in Batch, zumindest nicht für Windows < Win7. Da geht das mit timeout /T10 /nobreak, T10 = warte 10 Sekunden, /nobreak = nicht durch Tastendruck abbrechbar

Run ist einfach, einfach den Pfad mit vorangestelltem START aufrufen, z. B. START "C:\Programme\Test 1\Test1.exe"
Ob du EXIT brauchst, weiß ich momentan nicht, hängt davon ab, ob die Konsole offen bleibt. Musst du einfach mal ausprobieren.
 
Programme schließen müsste mittels taskkill funktionieren: taskkill /f /im app.exe
Die Syntax für Fensternamen ist etwas fummelig, evtl. ist das mit dem Anwendungsnamen einfacher zu realisieren.

Geht leider nicht da es hierbei um mehrere Server geht die gleichnamige .exen Starten. Arbeite ich da mit taskkill killt er alle Server aufeinmal was er eben nicht soll. Daher war ich auf die Autoit Version gewechselt um per Fensternamen killen zu können der immer gleich ist und sich nur über den Gameport ändert pro Server.

Wie lautet denn der Befehl für killen mit Fensternamen? Evtl. krieg ich das ja damit hin ;)

Sleep gibt es AFAIK so nicht in Batch, zumindest nicht für Windows < Win7. Da geht das mit timeout /T10 /nobreak, T10 = warte 10 Sekunden, /nobreak = nicht durch Tastendruck abbrechbar

Code:
ping -n 31 127.0.0.1>nul

Ginge das nicht auch einfach mit diesem Befehl?

Run ist einfach, einfach den Pfad mit vorangestelltem START aufrufen, z. B. START "C:\Programme\Test 1\Test1.exe"
Ob du EXIT brauchst, weiß ich momentan nicht, hängt davon ab, ob die Konsole offen bleibt. Musst du einfach mal ausprobieren.

Alles klar das hilft! :)

Vielen Dank schon mal!

Mfg kikyou2
 
taskkill /f /fi "Windwowtitle eq <titel>" /im <appname> wenn ich die verlinkte Doku richtig verstanden habe. Killt also alle Anwendungen vom Typ <appname> deren Fenstertitel <titel> lautet.

Das sleep mit ping emulieren geht auch, hab's halt nicht erwähnt weil ich es unschön finde ;-)
 
andere Frage:
Warum nicht mehr mit AutoIT ?

Weil es sich hier um Arma 2 Server mit dem DayZ Mod handelt. Diese Server habe ich mit Ibattle ausgestattet und mit Hilfe einer Scheduler.xml ein Script erstellt mit dem Ingame dann vor dem nächsten Restart mehrmals gewarnt wird und dann zu bestimmten Uhrzeiten das hier behandelte Restart Script startet. Scheinbar kann der Scheduler aber keine .exe starten und mit .bat gab es da bisher kein Problem (bspw. mit einem Server per taskkill). Daher will ich jetzt zu einer Batch zurück :)

taskkill /f /fi "Windwowtitle eq <titel>" /im <appname> wenn ich die verlinkte Doku richtig verstanden habe. Killt also alle Anwendungen vom Typ <appname> deren Fenstertitel <titel> lautet.

Das sleep mit ping emulieren geht auch, hab's halt nicht erwähnt weil ich es unschön finde ;-)

Ich probier es mal, dickes Danke an dich! :daumen:

wg. Ping alles klar :)
 
alternativ könntest du auch über die ProzessID (PID) gehen

evtl sowas in der Richtung:



@echo off
REM Liste der Prozesse VOR dem Start
tasklist /V>%temp%\PIDs_vor.txt
start calc.exe

REM Liste der Prozesse NACH dem Start
tasklist /V>%temp%\PIDs_nach.txt


REM Beide Listen vergleichen und die neue PID auslesen
for /F "tokens=2 delims= " %%a in ('fc %temp%\PIDs_vor.txt %temp%\PIDs_nach.txt^|find "calc.exe"') do set PID=%%a

REM Temp Dateien löschen und PID in Datei speichern
del %temp%\PIDs_vor.txt
del %temp%\PIDs_nach.txt
echo %PID% >%temp%\pid.txt


REM PID aus Datei auslesen und Task schließen



for /f %%i in (%temp%\pid.txt) do (
set PID=%%i
)
echo %PID%
taskkill /pid %PID%
 
Zuletzt bearbeitet:
alternativ könntest du auch über die ProzessID (PID) gehen

evtl sowas in der Richtung:



@echo off
REM Liste der Prozesse VOR dem Start
tasklist /V>%temp%\PIDs_vor.txt
start calc.exe

REM Liste der Prozesse NACH dem Start
tasklist /V>%temp%\PIDs_nach.txt


REM Beide Listen vergleichen und die neue PID auslesen
for /F "tokens=2 delims= " %%a in ('fc %temp%\PIDs_vor.txt %temp%\PIDs_nach.txt^|find "calc.exe"') do set PID=%%a

REM Temp Dateien löschen und PID in Datei speichern
del %temp%\PIDs_vor.txt
del %temp%\PIDs_nach.txt
echo %PID% >%temp%\pid.txt


REM PID aus Datei auslesen und Task schließen



for /f %%i in (%temp%\pid.txt) do (
set PID=%%i
)
echo %PID%
taskkill /pid %PID%

Ist zwar schön aber doch viel zu aufwendig? Mit taskkill sollte das ja klappen.
Warum kannst du in deinem Task Sheduler keine Exe starten? Sollte eigentlich funktionieren, evtl. Mal die Berechtigungen oder den ausführenden User prüfen :-).
 
Oder machst ne .bat welche die .exe startet ;)

Genau darauf bin ich jetzt mittlerweile auch gekommen und so habe ich es auch gelöst.

Schon blöd das ich da nicht eher drauf gekommen bin :D

Mit Windowtitle hat es leider nicht funktioniert aber so wie es jetzt ist funktioniert es, auch wenn es evtl. nicht ganz so "schön" ist :D

Danke für die Hilfe @all
 
Hmm scheinbar schafft Scheduler.xml auch das nicht. Daher habe ich mir überlegt soll er über den Scheduler nur die Warnungen ausgeben (funktioniert) und ein Autoit Script restartet die Server immer von alleine.

Das hier hab ich mir ausgedacht/im Netz zusammengesucht :D

Code:
While 1
    $sTime = _Time(2) & ":" & @SEC
    Select
        Case $sTime = "02:00:00"
            _restart3()
        Case $sTime = "04:00:00"
            _restart2()
        Case $sTime = "06:00:00"
            _restart1()
	Case $sTime = "08:00:00"
            _restart3()
        Case $sTime = "10:00:00"
            _restart2()
        Case $sTime = "12:00:00"
            _restart1()
	Case $sTime = "14:00:00"
            _restart3()
        Case $sTime = "16:00:00"
            _restart2()
        Case $sTime = "18:00:00"
            _restart1()
	Case $sTime = "20:00:00"
            _restart3()
        Case $sTime = "22:00:00"
            _restart2()
        Case $sTime = "00:00:00"
            _restart1()
    EndSelect
    Sleep(50)
WEnd

Func _Time($pre)
    If $pre = 1 Then
        Return @HOUR
    ElseIf $pre = 2 Then
        Return @HOUR & ":" & @MIN
    ElseIf $pre = 3 Then
        Return @Hour & ":" & @Min & ":" & @SEC
    EndIf
EndFunc ;==>_Time($pre)

Func _restart1()
	WinClose("ArmA 2 OA Console version 1.62 : port 2302", "")
	Sleep (30000)
	Run("C:\SERVER\DE 2471\arma 2 operation arrowhead\DE 2471.bat", "")
EndFunc

Func _restart2()
	WinClose("ArmA 2 OA Console version 1.62 : port 2308", "")
	Sleep (30000)
	Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #2 Chernarus Server\dayz_server.bat", "")
EndFunc

Func _restart3()
	WinClose("ArmA 2 OA Console version 1.62 : port 2309", "")
	Sleep (30000)
	Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\dayz_lingor_server.bat", "")
EndFunc

Problem jetzt nur wenn das Script die .bat startet kommt immer folgende Fehlermeldung:

http://i50.tinypic.com/dm8r4y.png

Wenn ich die Funktion an sich nur als einfaches Script nehme, also:

Code:
	WinClose("ArmA 2 OA Console version 1.62 : port 2309", "")
	Sleep (30000)
	Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\dayz_lingor_server.bat", "")

Und dieses dann manuell starte funktioniert es ohne Probleme. Jemand eine Ahnung woran das liegen könnte?

Mfg kikyou2

Edit: Lösung gefunden hat sich erledigt. Dadurch das das Autoit Script nicht im Verzeichnis lag wo die bat liegt und diese sich direkt auf das Verzeichnis bezogen hat konnte sie die Dateien nicht finden.

Ein einfaches CD Pfad der bat hat gereicht :D
 
Zuletzt bearbeitet:
Zurück