Alle anderen Fenster mit dem selben Titel schliessen
ich wollte immer nur eine Instanz meines Batch Skripts zulassen...
Hallo zusammen
ich habe wieder bisschen gebätscht.
Wie der Titel schon suggeriert, wollte ich, dass sich alle offenen Batch-Skripte mit dem selben Titel automatisch schliessen, wenn ich ein neues aufmache. Diese Aufgabe konnte ich einigermassen bewältigen. Nur leider hat es noch einige unschönheiten drin, welche vielleicht jemand mit mir ausmerzen kann.
Das Skript sieht bisher so aus:
Am schlimmsten ist es, dass :Proc noch ein zweites Mal aufgerufen wird, nachdem alle alten Fenster geschlossen wurden. Das schadet der Funktionalität zwar nicht, jedoch möchte ich gerne verstehen wieso das gemacht wird und wie ich es besser machen könnte. Ausserdem bin ich offen für Anregungen wie der Code sonst noch kürzer oder sonst irgendwie besser geschrieben werden könnte.
Bin offen für alle Inputs. Danke und Gruss
cee
Hallo zusammen
ich habe wieder bisschen gebätscht.
Wie der Titel schon suggeriert, wollte ich, dass sich alle offenen Batch-Skripte mit dem selben Titel automatisch schliessen, wenn ich ein neues aufmache. Diese Aufgabe konnte ich einigermassen bewältigen. Nur leider hat es noch einige unschönheiten drin, welche vielleicht jemand mit mir ausmerzen kann.
Das Skript sieht bisher so aus:
@echo off & setlocal
title=test.bat
REM zweimal suchen, damit an erster Stelle durchnummeriert wird
tasklist /FI "WINDOWTITLE EQ test.bat" | findstr "cmd.exe" | findstr /n /c:"cmd.exe" >echo.txt
for /f "delims=:" %%i in ('findstr /n $ "echo.txt"') do set /a linecount=%%i
REM echo linecount = %linecount%
REM letzte Zeile beinhaltet die neuste PID die erhalten bleiben muss
for /F "tokens=1-3* delims=: " %%i in (echo.txt) do set /a count=%%i & set /a pid=%%k & call :Proc
:Proc
echo Instanz %count% hat PID: %PID%
REM Letzte Instanz am Leben lassen
if "%count%" == "%linecount%" goto :End
echo kill it
taskkill /FI "PID EQ %PID%" >nul
goto :EOF
:End
echo Ich darf leben...
pause
del echo.txt
Am schlimmsten ist es, dass :Proc noch ein zweites Mal aufgerufen wird, nachdem alle alten Fenster geschlossen wurden. Das schadet der Funktionalität zwar nicht, jedoch möchte ich gerne verstehen wieso das gemacht wird und wie ich es besser machen könnte. Ausserdem bin ich offen für Anregungen wie der Code sonst noch kürzer oder sonst irgendwie besser geschrieben werden könnte.
Bin offen für alle Inputs. Danke und Gruss
cee
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121787
Url: https://administrator.de/contentid/121787
Ausgedruckt am: 25.11.2024 um 03:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo,
füge ein bei Zeile 15 und Zeile 30.
Peter
füge ein bei Zeile 15 und Zeile 30.
> @echo off & setlocal
> title=test.bat
>
> REM zweimal suchen, damit an erster Stelle durchnummeriert wird
> tasklist /FI "WINDOWTITLE EQ test.bat" | findstr
> "cmd.exe" | findstr /n /c:"cmd.exe" >echo.txt
> for /f "delims=:" %%i in ('findstr /n $
> "echo.txt"') do set /a linecount=%%i
> REM echo linecount = %linecount%
> REM letzte Zeile beinhaltet die neuste PID die erhalten bleiben muss
> for /F "tokens=1-3* delims=: " %%i in (echo.txt) do set /a
> count=%%i & set /a pid=%%k & call :Proc
rem verhindern das Proc nochmals durchlaufen wenn es nichts mehr gibt
goto EOF
> :Proc
> echo Instanz %count% hat PID: %PID%
> REM Letzte Instanz am Leben lassen
> if "%count%" == "%linecount%" goto :End
> echo kill it
> taskkill /FI "PID EQ %PID%" >nul
> goto :EOF
>
> :End
> echo Ich darf leben...
> pause
> del echo.txt
>
>:EOF
>
>
Peter