名前の変更方法はうまくいきませんでした (Windows XP SP3 でテスト済み)。任意のアプリケーションを起動し、それ自体の名前を変更しようとしました。エラーも効果もありませんでした。
ただし、この方法は機能しました。
COPY /B app.exe+NUL app.exe
アプリケーションの実行中に、このコマンドでエラー メッセージが表示されました。また、アプリケーションが使用されていない場合、このコマンドはファイルの内容を保持するだけでなく、変更のタイムスタンプも変更しませんでした。
したがって、私があなただったら、おそらくこのコマンドを(あなたが言ったように、バッチスクリプトの最初で)次のように使用します。
COPY /B app.exe+NUL app.exe >NUL || (GOTO :EOF)
前の||
コマンドが失敗した (errorlevel 値が上がった) 場合、オペレーターは次のコマンド/ブロックに制御を渡します。したがって、上記のコマンドは、COPY が失敗した場合 (ファイルが開いている場合) にスクリプトを終了します。
エラーメッセージは保存されます (そのようなメッセージは通常、いわゆる標準エラーデバイスに送信され、>NUL
リダイレクトによって破棄されませんが、エラー以外のメッセージは通常、標準出力に送信されるため、 で抑制することができます>NUL
) 。スクリプトの早期終了の説明として役立ちます。ただし、代わりに独自のメッセージを表示したい場合は、次のようにすることができます。
COPY /B app.exe+NUL app.exe >NUL 2>NUL || (ECHO Target file inaccessible& GOTO :EOF)
>NUL
標準出力に送信されるものは何でも非表示にし2>NUL
ますが、標準エラーに対しても同じことを行います。