Is there a way to do this purely in a .bat file?
The purpose is to launch iexplore.exe
, then kill just that instance when it s finished.
Is there a way to do this purely in a .bat file?
The purpose is to launch iexplore.exe
, then kill just that instance when it s finished.
Here s what I use:
@echo off
rem there is a tab in the file at the end of the line below
set tab=
set cmd=javaw -jar libMyProg.jar
set dir=%~dp0
echo Starting MyProg
set pid=notfound
for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (
`wmic process call create "%cmd%"^, "%dir%"`
) do (
if /I %%i EQU ProcessId (
set pid=%%j
)
)
echo %pid% > MyProg.pid
The directory is set to the directory that the cmd file is located in. Change dir
to alter that. Modify cmd
to change which command is run.
If you want a stop.cmd that kills it, it would look like this
@echo off
for /F %%i in (%~dsp0MyProg.pid) do taskkill /F /PID %%i
del %~dsp0MyProg.pid
you can use vbscript, here s an example creating notepad, then terminating it using its pid
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "
ootcimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
Set objProcess = GetObject("winmgmts:rootcimv2:Win32_Process")
errReturn = objProcess.Create("notepad.exe", null, objConfig, PID)
If errReturn = 0 Then
WScript.Echo "Process ID is: " & PID
End If
WScript.Echo "Ready to kill process: " & PID & "? [Y|y]"
Do While Not WScript.StdIn.AtEndOfLine
strInput = strInput & WScript.StdIn.Read(1)
Loop
If LCase(strInput) = "y" Then
WScript.Echo "Select * from Win32_Process Where ProcessId = " & PID & " "
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessId = " & PID & " ")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End If
save as myscript.vbs and on command line
c: est> cscript /nologo myscript.vbs
A slight variation on the answer provided by @kybernetikos since it has a parsing issue. Note the line if %%j gr 0 (
@echo off
rem there is a tab in the file at the end of the line below
set tab=
set cmd=javaw -jar libMyProg.jar
set dir=%~dp0
echo Starting MyProg
set pid=notfound
for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (
`wmic process call create "%cmd%"^, "%dir%"`
) do (
if %%j gtr 0 (
set pid=%%j
)
)
echo %pid% > MyProg.pid
Most often you do know what task you start - in this case, which page iexplorer shall show.
So how about
taskkill /FI "Windowtitle eq *yourpagetitle*"
It will kill all instances of something showing your page title, but with a specific title most often there should be exactly one.
Tom
For some reason your approach of getting process id did not work for me, but since I m expert in batches, I ve coded my own approach, attaching here:
@echo off
call:AsyncCmd
rem call:AsyncCmd "echo hello world"
rem call:AsyncCmd "call build.bat"
exit /b
rem ------------------------------------------------------------------------------------------
rem Starts asynchronous command execution
rem %1 is command, if empty - only aborts existing build.
rem ------------------------------------------------------------------------------------------
:AsyncCmd
if exist %~dp0SetupBuild_Completed.txt (
del /f %~dp0SetupBuild_Pid.txt >nul 2>&1
del /f %~dp0SetupBuild_Completed.txt >nul 2>&1
)
if not exist %~dp0SetupBuild_Pid.txt goto lStartProc
rem --------------------------------------------------
rem Abort build process
rem --------------------------------------------------
set /p pid=<%~dp0SetupBuild_Pid.txt
echo Cancelling setup build process, process id %pid%
pskill -t %pid%
del /f %~dp0SetupBuild_Pid.txt >nul 2>&1
:lStartProc
if "%~1" == "" exit /b 0
rem --------------------------------------------------
rem Starts asyncronous build process
rem --------------------------------------------------
set dir=%~dp0
set dir=%dir:~0,-1%
for /f "tokens=2 delims==; " %%a in ( wmic process call create "cmd /c mincon.exe && %~1 && echo 1>%~dp0SetupBuild_Completed.txt"^, "%dir%" ^| findstr /r "ProcessId" ) do set pid=%%a
echo Setup build started, process id: %pid%
echo %pid%>%~dp0SetupBuild_Pid.txt
exit /b 0
PowerShell can be used for this:
powershell -executionPolicy bypass -command "& {$process = start-process $args[0] -passthru -argumentlist $args[1..($args.length-1)]; exit $process.id}" notepad test.txt
echo Process ID of new process: %errorlevel%
I think you can t do that with simple command line utilities, as IE actually spawns child processes for each tab, i.e. if IE is not yet running you would get one parent IE process and a child process for the tab, and if IE is already running you would simply get a single child process.
It will be even quite tricky when you write your own tool to kill IE because when you kill a child (tab) process, IE will automatically recover this tab.
See also this related question: How to obtain process of newly created IE8 window? (though there is no good answer there).
I m using VB.NET for a web-application that starts some process using CreateObject, like this: Dim AVObject = CreateObject("avwin.application") After all is done everything get closed down en ...
In Erlang is there any way that a message sender can wait on a response, so it only continues execution once the message has been processed? And I mean something like this: Actor ! DoSomething ...
I have a script vbs wich redirect some data to the stdin of myApp (written in C in Windows). If myApp was already launched before myApp finds the PID of the first myApp session and redirects the input ...
Does anyone know how to get the PID of the top active window and then how to get the properties of the window using the PID? I mean properties like process name, program name, etc. I m using Qt under ...
I start a background process from my shell script, and I would like to kill this process when my script finishes. How to get the PID of this process from my shell script? As far as I can see variable ...
Here s one for ya. Upon a forced quit of the Finder with unsuccessful relaunch, "killall Finder" in terminal returns: "No matching processes belonging to you were found" Oddly enough, the PID for ...
On my ubuntu server I run the following command: python -c import os; os.kill(5555, 0) This is done so that I can see if pid 5555 is running. From my understanding this should raise an OSError if ...
Is there a way to do this purely in a .bat file? The purpose is to launch iexplore.exe, then kill just that instance when it s finished.