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 の使い方が誤っています。」だよ。