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 の使い方が誤っています。」だよ。
トラックバック - http://d.hatena.ne.jp/orangeclover/20090903/1251988909
リンク元
- 3 http://bubble2sei.blog69.fc2.com/blog-entry-1054.html
- 3 http://twitter.com/orange_clover
- 2 http://www.google.co.jp/search?hl=ja&q=コマンドプロンプト IF+改行しない&btnG=検索&lr=
- 2 http://www.google.co.jp/search?hl=ja&source=hp&q=コマンドプロンプト ペースト&lr=&aq=f&oq=
- 2 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GZEZ_jaJP330JP330&q=コマンドプロンプト コマンド履歴表示%
- 1 http://blog.baidu.jp/s?tn=baidujpblog&ie=utf-8&cl=3&meta=ja&ct=262144&rn=10&time=0&bsm=1&wd=バッチファイル
- 1 http://blog.livedoor.jp/stock_value/archives/50772085.html
- 1 http://blogsearch.google.co.jp/blogsearch?hl=ja&lr=&um=1&ie=UTF-8&q=x64+windows&as_drrb=q&as_qdr=w
- 1 http://blogsearch.google.co.jp/blogsearch?hl=ja&q=バッチファイル&lr=lang_ja
- 1 http://d.hatena.ne.jp/keyword/EM64T