4

何か間違ったことをしているのかもしれませんが、ビルド用のバッチ ファイルのスクリプトを作成しているときに興味深い動作に遭遇しました。

テスト時にスクリプトが正しく実行されるように、ビルド マシン用と開発マシン用の 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

4

3 に答える 3

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> 
  )
)

そのようなコマンドがないため、行を開始できませんELSE(常に if と組み合わせる必要があります)。また、2 番目の if に引用符がありません。

于 2013-10-21T12:40:24.540 に答える
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>
  )
)
于 2013-10-21T12:37:46.510 に答える
1

それが正確なタスクである場合、これは同じロジックです。

IF EXIST "%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe" SET "VARNAME=<PATHB>"
IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" SET "VARNAME=<PATHA>"
于 2013-10-21T20:58:46.450 に答える