If you are still trapped in the era of batch files and command lines in Windows environment, here is something you can add to your DOS cheat codes. Lucky for us here, we are still using DOS batch file to implement installation of some updates to our system. Here is a simple batch file script that is designed for slow systems that requires a significant amount of time to kill a particular process. The requirement is simple, do not start any copying or moving of files until the process ( i.e. MyProcess.exe) is totally killed by DOS. The simplest solution would be to use TASKKILL to kill the process, wait for a few seconds then start copying/ moving of files there after. Unfortunately, while we were testing this simple step on a slow machine, DOS would take an awful lot of minutes to kill the process in question. Thus, when our delay is reached, we would encounter error on copying/moving files that is currently used by the unkilled process causing a failure on the installation. So instead of increasing our delay to God-Knows-How-Much , we went for another approach. That is to continuously try to kill the process ( after a certain delay ) until it is actually out of the task list. This would mean a:) continuously monitoring the task list to see if the process is still alive b:) create a loop that will do the monitoring of the task list, try to kill the process, delay for some time and repeat again.
Here is a simple script that my friend came out to solve the issue. She used TASKKILL to kill the process, TASKLIST to list the currently running process, a temporary file to dump the task list result, PING command to add delay and some FOR and IF statements. This worked on XP machines and also tested on Win2003 machines.
:Loop
TASKKILL /F /T /IM MyProcess.exe
echo delaying for 35sec...
ping 1.1.1.1 -n 1 -w 35000
TASKLIST /FI "IMAGENAME eq MyProcess.exe" /NH > tmp.txt
FOR /F %%A IN (tmp.txt) DO (
IF /I "%%~A"=="MyProcess.exe" (
GOTO Loop
)
)
del /F /Q tmp.txt
REM Continue the installation process here, after MyProcess.exe has been killed.
TASKKILL /F /T /IM MyProcess.exe
echo delaying for 35sec...
ping 1.1.1.1 -n 1 -w 35000
TASKLIST /FI "IMAGENAME eq MyProcess.exe" /NH > tmp.txt
FOR /F %%A IN (tmp.txt) DO (
IF /I "%%~A"=="MyProcess.exe" (
GOTO Loop
)
)
del /F /Q tmp.txt
REM Continue the installation process here, after MyProcess.exe has been killed.
Comments
The creation of temp file is not really needed. If Command extensions are enabled (SETLOCAL ENABLEEXTENSIONS) FOR can execute a utility and then parse its output
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
See "FOR /?" for more details...