バッチの二重起動防止

以前バッチの二重起動防止用にロックファイル生成するロジックを作りこんで失敗したことがあって(バッチ実行中にサーバがブルーバックなんかでリブートすると、次回起動時にファイルを手で消さなければいけなくなる)、何かもっといい方法が無いもんかねとたまに考えることがあったのだけど、今日思い出してなんとなく検索してみたらすげぇイカス方法を発見(「バッチファイルの二重起動を防止する。」)。


オリジナルの方法だと、拡張子付けずにバッチファイル実行すると拡張子無しのごみファイルが出来てしまう。几帳面に実行ファイル名を展開し、ついでに本体ロジックが括弧内というのがその後何かと面倒くさいので括弧を外し、二重起動時は特定のエラーレベルを返すようにすると、パターンとしては以下のような感じになるのかしら


rem バッチのERRORLEVELが -1 の場合は二重起動でエラー
set RC=-1
call :main 0>>"%~dpnx0"
exit /b %RC%

:main
notepad.exe
set RC=0