私の名前変更方法は機能しませんでした(Windows XP SP3でテスト済み)。私は任意のアプリケーションを起動し、それ自身に名前を変更しようとしました。エラーはなく、何の効果もありませんでした。
しかし、この方法では、仕事をした:
COPY /B app.exe+NUL app.exe
アプリケーションが実行されていた、このコマンドは私にエラーメッセージを生成します。また、アプリケーションがロックされていない場合、このコマンドだけではファイルの内容は保持されませんでしたが、変更タイムスタンプは変更されませんでした。
私があなただったら(あなたが言ったように、バッチスクリプトの先頭で)、それゆえ、私はおそらくこのように、このコマンドを使用します。
COPY /B app.exe+NUL app.exe >NUL || (GOTO :EOF)
||
オペレータは、コマンドに制御を渡します。前のコマンドが失敗した場合(エラーレベル値を上げた場合)、その隣の/ブロックしたがって、上記のコマンドは、COPYが失敗した場合にスクリプトを終了します(ファイルが開いていた場合)。
エラーメッセージは通常、いわゆる標準エラーデバイスに送信され、>NUL
リダイレクトで破棄されないため、通常は標準出力に送信されるため、エラーメッセージは保存されます。 >NUL
で抑制する)、スクリプトの早すぎる終了の説明として役立ちます。 2>NUL
は、標準エラーのため同じことを、標準出力に送信されているもの
COPY /B app.exe+NUL app.exe >NUL 2>NUL || (ECHO Target file inaccessible& GOTO :EOF)
>NUL
ながら皮革:あなたの代わりに独自のメッセージを表示したい場合は、このような何かを試すことができます。
ありがとう@Andriy。うん、それは動作します。しかし、関係する実行可能ファイルが大きい場合は、少し時間がかかりますが、それは私のものです。私が考えたもう一つの方法は、ファイルの名前をランダムな名前に変更しようとする2行のdelphiユーティリティを作成し、成功した場合はそれを再度名前を変更し、できなかった場合はゼロ終了コードを返します。 – rossmcm