4.基本文法 (2)if文の注意事項 〜\Microsoft の使い方が誤っています。〜 【コマンドプロンプト、バッチファイルを使わなきゃならなくなった人向けのメモ】

通常は以下の書き方が多いと思う。

IF "%ARG1%"=="%ARG2%"

しかしこの場合値に 「"」が含まれるとエラーになってしまう。

例えば、バッチのパラメータに空白を含むディレクトリを
指定するために、「"」「"」(ダブルクォート)でくくった場合など。


なので以下のように書くようにしている。

  IF {%ARG1%}=={%ARG2%} 
NGなパターンのバッチファイル
IF "%1"=="%2" (
  echo equal.
) ELSE (
  echo not equal.
)

%1,%2はコマンドパラーメターを表す特別な変数

NGなパターンの実行結果
c:\>D:\MyDoc\work\#blog\コマンドプロンプト\if-error.bat "C:\Documents and Settings\orangeclover" "C:\Documents and Settings\orangeclover"
and の使い方が誤っています。

c:\>IF ""C:\Documents and Settings\orangeclover""==""C:\Documents and Settings\orangeclover"" (
OKなパターンのバッチファイル
IF {%1}=={%2} (
  echo equal.
) ELSE (
  echo not equal.
)
OKなパターンの実行結果
c:\>D:\MyDoc\work\#blog\コマンドプロンプト\if-{}.bat "C:\Documents and Settings\orangeclover" "C:\Documents and Settings\orangeclover"

c:\>IF {"C:\Documents and Settings\orangeclover"} == {"C:\Documents and Settings\orangeclover"} (echo equal. )  ELSE (echo not equal. )
equal.


「{」「}」の代わりに「'」「'」でくくる手もあるが、'09などのディレクトリもよくある。
「{」「}」もディレクトリ名に使えるのので完全ではないが、「"」「"」と「 '」「'」よりかは
「{」「}」の方が確立が低いと思う。


しかし、これでも罠が残っていた。
Windows Server 2003 x64版でテスト用にPATHを設定しようと以下のようなバッチを
組んでいた。



if {%1} == {%2} (
    setlocal
    set PATH=%NORMAL_TEST_HOME%\bin;%PATH%
    endlocal
) else (
    set PATH=%ERROR_TEST_HOME%\bin;%PATH%
)

これが動かないのである。

Microsoft の使い方が誤っています。

なんじゃそりゃ

C:\>test.bat a b
\Microsoft の使い方が誤っています。

C:\>test.bat a a
\Microsoft の使い方が誤っています。


x64版だと32bitモジュールはC:\Program Files (x86)に含まれるている。
そのため環境変数が以下のようになっている

C:\>set PATH=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\BIN\amd64;C:\Program Files (x86)\Mi
crosoft Visual Studio 8\VC\PlatformSDK\bin\win64\amd64;C:\Program Files (x86)\Microsoft Visual Studi
〜省略〜

そうするとPATHに含まれている「(」「)」を誤認してしまうのだ。。。

回避として、IF文を2つにしたけど。。。


エラーにある通りだ。

「(」「)」を含むディレクトリをデフォルトにして、set PATHができないなんて
ホント 「Microsoft の使い方が誤っています。」だよ。







関連あるかもしれない記事