Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Alle anderen Fenster mit dem selben Titel schliessen

Frage Entwicklung Batch & Shell

Mitglied: ceerotolerance

ceerotolerance (Level 1) - Jetzt verbinden

31.07.2009, aktualisiert 17:25 Uhr, 4056 Aufrufe, 2 Kommentare

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:
01.
@echo off & setlocal 
02.
title=test.bat 
03.
 
04.
REM zweimal suchen, damit an erster Stelle durchnummeriert wird 
05.
tasklist /FI "WINDOWTITLE EQ test.bat" | findstr "cmd.exe" | findstr /n /c:"cmd.exe" >echo.txt 
06.
for /f "delims=:" %%i in ('findstr /n $ "echo.txt"') do set /a linecount=%%i  
07.
REM echo linecount = %linecount% 
08.
REM letzte Zeile beinhaltet die neuste PID die erhalten bleiben muss 
09.
for /F "tokens=1-3* delims=: " %%i in (echo.txt) do set /a count=%%i & set /a pid=%%k & call :Proc 
10.
 
11.
:Proc 
12.
	echo Instanz %count% hat PID: %PID% 
13.
	REM Letzte Instanz am Leben lassen 
14.
	if "%count%" == "%linecount%" goto :End 
15.
		echo kill it 
16.
		taskkill /FI "PID EQ %PID%" >nul 
17.
		goto :EOF 
18.
		 
19.
:End 
20.
	echo Ich darf leben... 
21.
	pause 
22.
	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
Mitglied: Pjordorf
31.07.2009 um 17:38 Uhr
Hallo,

füge ein bei Zeile 15 und Zeile 30.


01.
> @echo off & setlocal 
02.
> title=test.bat 
03.
>  
04.
> REM zweimal suchen, damit an erster Stelle durchnummeriert wird 
05.
> tasklist /FI "WINDOWTITLE EQ test.bat" | findstr 
06.
> "cmd.exe" | findstr /n /c:"cmd.exe" >echo.txt 
07.
> for /f "delims=:" %%i in ('findstr /n $ 
08.
> "echo.txt"') do set /a linecount=%%i  
09.
> REM echo linecount = %linecount% 
10.
> REM letzte Zeile beinhaltet die neuste PID die erhalten bleiben muss 
11.
> for /F "tokens=1-3* delims=: " %%i in (echo.txt) do set /a 
12.
> count=%%i & set /a pid=%%k & call :Proc 
13.
 
14.
rem verhindern das Proc nochmals durchlaufen wenn es nichts mehr gibt 
15.
goto EOF 
16.
 
17.
> :Proc 
18.
> 	echo Instanz %count% hat PID: %PID% 
19.
> 	REM Letzte Instanz am Leben lassen 
20.
> 	if "%count%" == "%linecount%" goto :End 
21.
> 		echo kill it 
22.
> 		taskkill /FI "PID EQ %PID%" >nul 
23.
> 		goto :EOF 
24.
> 		 
25.
> :End 
26.
> 	echo Ich darf leben... 
27.
> 	pause 
28.
> 	del echo.txt 
29.
30.
>:EOF 
31.
32.
> 


Peter
Bitte warten ..
Mitglied: ceerotolerance
02.08.2009 um 09:18 Uhr
Ja das war's. Auf Zeile 30 ist das Label gar nicht nötig, da das Ende der Datei sowieso mit :EOF bezeichnet wird.

Kann mir jemand noch sagen, wie ich es machen könnte, ohne dass ich eine temporäre Datei benötige?

Das wär super. Danke und Gruss
cee
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows Server
RemoteApp Fenster kommt nicht in den Vordergrund (1)

Frage von thomasreischer zum Thema Windows Server ...

Windows Userverwaltung
gelöst Mit der PoweShell die lokal angelegten Users eines anderen Rechners auflisten (7)

Frage von M.Marz zum Thema Windows Userverwaltung ...

VB for Applications
gelöst Mehrere Charts per VBA erstellen lassen, Titel wird nicht angezeigt

Frage von Aximand zum Thema VB for Applications ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...