ich hoffe das mir hier vielleicht der eine oder andere noch ein paar Tipps zu Shellscripten für die cmd.exe auf Windows geben kann. Ich beschäftige mich seit kurzer Zeit damit. Zuerst war ich abgeschreckt von den wirklich perversen Syntax, zumindest im Vergleich zu "richtigen" Programmiersprachen. Aber ich habe nicht aufgegeben und so sind ein paar Scripte entstanden.
Eines davon möchte ich hier mal zur Diskussion stellen. Wenn Ihr Lust habt, könnt Ihr es einfach ausprobieren, Kritik und Verbesserungsvorschläge, insbesondere zu Semantik und Syntax, sind erwünscht. Darauf, wie das Script im einzelnen funktioniert, will ich nicht eingehen, wäre wohl zu langweilig, aber das Script macht folgendes:
Wenn es gestartet wird, egal von wo und wie, erzeugt es zwei Fenster, die sich gegenseitig überwachen. Sobald das eine Fenster geschlossen wird, egal welches, wird es von dem anderen in kurzer Zeit (ca 0,5 sec) wieder geöffnet. Es bleiben aber immer nur zwei Fenster, sonst wäre es ja billig. Man kann das ganze also als Geschicklichkeitsspiel betrachten, bei dem es darauf ankommt, beide Fenster kurz hintereinander zu schliessen.
Für den Fall, dass es jemand den Trick nicht herausfinden sollte und die Fenster nicht geschlossen bekommt, braucht er nur auf die Hifedatei zu klicken, die das Script nach dem Start als erstes anlegt. Diese Hilfedatei schliesst die beiden widerspenstigen Fenster und entsorgt auch gleich die temporären Dateien, die von dem Script angelegt wurden.
@echo off title survivor if not "%1"=="new" call :helpfile :: :: survivor by 2cool, to stop use help.cmd :: set processname=234.exe set startcommand=/min %temp%\234.exe /c %temp%\234.cmd new if "%~nx0"=="234.cmd" ( set processname=123.exe set startcommand=/min %temp%\123.exe /c %temp%\123.cmd new ) if not exist "%temp%\123.cmd" ( type %0 > %temp%\123.cmd type %systemroot%\system32\cmd.exe > %temp%\123.exe start /min cmd /c "start /min %temp%\123.exe /c %temp%\123.cmd new" goto :eof ) if not exist "%temp%\234.cmd" ( type %0 > %temp%\234.cmd type %systemroot%\system32\cmd.exe > %temp%\234.exe start /min cmd /c "start /min %temp%\234.exe /c %temp%\234.cmd new" goto :eof ) echo.try to close me :checking ping -n 1 127.0.0.1 > nul tasklist | findstr /i "%processname%" > nul if errorlevel 1 start /min cmd /c "start %startcommand%" goto checking :: :: make a helpfile to stop the show :: :helpfile echo :: run this file to stop>"%~dp0help.cmd" echo @echo off>>"%~dp0help.cmd" echo echo.stopping the show and deleting my tempfiles>>"%~dp0help.cmd" echo start /min cmd /c "del /f /q %temp%\123.cmd">>"%~dp0help.cmd" echo start /min cmd /c "del /f /q %temp%\234.cmd">>"%~dp0help.cmd" echo start /min cmd /c "taskkill /im 123.exe /f">>"%~dp0help.cmd" echo start /min cmd /c "taskkill /im 234.exe /f">>"%~dp0help.cmd" echo start /min /wait cmd /c "ping -n 3 127.0.0.1>nul">>"%~dp0help.cmd" echo start /min cmd /c "ping -n 2 127.0.0.1>nul && taskkill /im cmd.exe /f">>"%~dp0help.cmd" echo start /min cmd /c "del /f /q %temp%\123.exe">>"%~dp0help.cmd" echo start /min cmd /c "del /f /q %temp%\234.exe">>"%~dp0help.cmd" echo start /min cmd /c del /f /q "%~dp0help.cmd">>"%~dp0help.cmd" goto :eof
greetz
Dieser Beitrag wurde von 2cool bearbeitet: 23. Mai 2006 - 12:21