2009-09-03
\Microsoft の使い方が誤っています。
入門 4.基本文法 (2)if文の注意事項
コマンドプロンプト、バッチファイルを使わなきゃならなくなった人向けのメモ
昨日ifの条件文で以下の書き方をした。
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 の使い方が誤っています。」だよ。