Single instance batch file?
batch-file, single-instance, windows
Solution
Well, if there can be only exactly one instance ever, then you can probably do this by creating a dummy file somewhere, probably in the temp directory:
copy NUL "%TEMP%\dostuff_is_doing_stuff.tmp"
you then remove it after you're done:
del "%TEMP%\dostuff_is_doing_stuff.tmp"
and at the start of the batch file you can check whether that file exists and exit accordingly:
if exist "%TEMP%\dostuff_is_doing_stuff.tmp" (
echo DoStuff is already running. Exiting ...
exit /b 1
)
Similarly, you can do that by changing the window title, which should also be more robust against a Ctrl+C'ed or crashed batch file.
Set the title:
title DoStuff
Re-set it afterwards:
title Not doing stuff
Check for it:
tasklist /FI "WINDOWTITLE eq DoStuff"
However, this has one problem: When cmd runs as administrator you'll get "Administrator: DoStuff" as the title. Which doesn't match anymore with `tasklist`. You can hack-solve it by also checking for "Administrator: DoStuff" but that might look different depending on the Windows UI language, so it's probably not the best solution.
Problem
``` :: dostuff.bat @echo off :: insert long-running process call here : End ``` What can I add to this batch file to make it terminate if it's already running in another process when it's executed?