何か間違ったことをしているのかもしれませんが、ビルド用のバッチ ファイルのスクリプトを作成しているときに興味深い動作に遭遇しました。
テスト時にスクリプトが正しく実行されるように、ビルド マシン用と開発マシン用の 2 つの異なるパスをスクリプト化する必要がありました。
だから私は以下を持っていました:
IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" (
SET VARNAME=<PATH>
) ELSE (
IF EXIST "%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe" (
SET VARNAME=<PATH>
)
)
開発マシンでは、パスはパス B である必要があり、パス A は存在しません。ただし、親パスは両方のマシンに存在し、サブパスは同じです。ただし、アプリケーション パスは同じではありません。これらは、Windows で一意のパスです。
開発マシンで IF EXISTS 式に 'Filename.exe' を含めると、パス A が開発マシンに存在しない場合でも、ステートメントは常にパス A に対して true を返します。問題を解決した方法である Filename.exe を削除すると、パスはパス A に対して false を返し、パス B に対して True を返します。
アプリケーションが正しくインストールされていること、およびビルド システムに Filename.exe が存在することを前提としています。これは、正確にテストできないためです。
他の誰かがこのような動作を見たことがありますか、または動作を変更するために他に何かできることはありますか?
編集: これは Windows XPsp3 上にあることに言及する必要があります。 編集: コードを再フォーマットして、実際のバッチ ファイル形式を反映し、クイック タイプアップによる他のユーザーの混乱を回避しました。ダミー私は仮定をしました:D