へっぽこXP
以下の2行の内容のx.batを作る。次にマイドキュメントとか、パス中にスペースを含むフォルダ下のファイルをこのx.batにドラッグ&ペーストする。と、pauseコマンドすら実行されず、ぶっとぶ。ひどい話だ。
if "%1" == "" echo ぬるぽ
pause
このバッチ処理は引数%1が在りや否をチェックする基本中の基本であります。
いろいろ試してみると、順序を逆にして「if "" == "%1" echo ぬるぽ」にしたら、できたーよ。あほか。
でも、これの出力結果表示をみてみると、こんなかんじに展開されてた。
C:\>if "" == ""C:\Documents and Settings\Guest\any.txt"" echo ぬるぽ
なので、「if "%1" == "" echo ぬるぽ」の場合を推定してみる。
C:\>if ""C:\Documents and Settings\Guest\any.txt"" == "" echo ぬるぽ
これで構文エラーにおさまらず、とんじゃう。
ちなみに、「if not "" == "%1" echo ぬるぽ」とか「if not "%1" == "" echo ぬるぽ」とか試してみると構文エラーでandがどーたらこーたらと表示されたりした。
早い話が%1が展開されダブルダブルクオーテーションで括られたため、構文解釈に支障をきたしたらしいのだ。「if "" == "%1" echo ぬるぽ」がうまく動くのは偶然にすぎないらしい。
で、なぜ%1が展開されるとダブルダブルクオーテーションで括られるかというと、そもそもパス中にスペースがあるからか、送り手側でダブルクオーテーションを付けて寄越す。(余計なことを。)結果、2重にダブルクオーテーションがつくらしい。
でも「if %1 == "" echo ぬるぽ」にしておくと、引数がないとき、エラーになっちまうのでやっぱりペケ。
Windows98では当然ながら、こうしたことは起こらない。なぜなら%1にロングファイル名は代入されないからだ。パス中にスペースがはいることもない。
WindowsXPではロングファイル名に対応した結果、パス中にスペースがはいることになった。ので、ダブルクオーテーションの付加が要ったらしい。そもそもは想定外なのかもしらんが。
お粗末な話である。updateすれば直るのかしらん。
基本中の基本な形だけに、このバグに到達するまでは充分に幻惑されること間違いない。フロイトのように常に疑り深い人でなければ、すぐには分からない。執念深い人は、ついにはワンステップワンステップ確認し始め、やっと分かる。しかも実行させるフォルダの場所によってうまく動いたりしなかったりだから、当惑すること甚だしい。ひどいバグだ。
しかし、MS−DOSには充分に幻惑されつづけたよ、ホント。コピー機よりはマシかもしれんが。ホント、コピー機にはよく泣かされたからな。コピー機こそ悪魔のマシーンだと信じてきたが、Windowsは、悪魔のOSと呼ぶに相応しい。ホント、こんなことできないの?なんで?ウソ!というようなことが昔はおろか、今でさえ変わってなくて、あいかわらずのヘッポコぶりにはさすがに驚き呆れるばかり。ヘッポコぶりにはもう大抵慣れたつもりだったんだけどさ。
んやー、でも、IBMコンパチ機からOSのスタンダードにのしあがり、パソコンの激安化におおきく貢献したから感謝しつつも、毎度ヘッポコぶりに遭遇するたび怒り、そしてあきれ、疲れるんだが、安くなったよなー。はじめてマッキントッシュのGUIを見たときは、すばらしいと感嘆したものだったけど、値段が60万円くらいしてて、それでも安いほうだったんだけどさ。そのときは、まだ各社各様にハードにBIOSを作ってMS-DOS載せて、それでも100マン以上してたんだよ。GUIなんかないし、コマンド入力もUNIXに比べたらはるかに貧弱なMS-DOSだったのになー。
あ、そうだ。この手のしょうもないバグってマニアル本には書いてないんだよな。これもヒドイ話。コマンド入力も慣れれば便利ですよー、と謳いつつ、バグにはふれない。知ってて書かないか、検証してないか、どっちか。売れればいいんだね。
マニアル本って、基本的には不都合なことは載せてないね。
むかし、青焼きってあったよなー。出来上がると、ちょっとハナにツンときてさー。知らないだろうなー。日光焼きみたいなもんかなー。むかしは随分とのんびりしてたなー。1000ステップくらいのコンパイルに30分くらいかけてたかな。8インチのシステムフロッピーにワークフロッピーがガッチャコンガッチャコン。それが30分続いて、最後にガッチャコンガッチャコン、ガチャガチャ、ンーーー、ポッカッって終わるの。だからコンパイルするたびに自販機のコーヒー買ってきて飲んで、おなかチャプチャプになってさ。よくイスでくるくる回ってる奴いたよ、やることなくて。あと、2〜3行書き換える度にリスト出力してさ。これがまたパソコンだと時間くってさ。で、バグ直ったかなーって、動かしてみて、あ、ダミだぁー。で、こうかなっとチョコっと書き直して、またコンパイル。あてずっぽか。
そういえば、もっと昔はコンパイルとリスト出力が一括バッチされてて、ちょっと書き換えてコンパイル、ちょっと書き換えてコンパイルするとリストだけ山のようになってさ。それの名残りなんだよね、しょっちゅうプリントアウトするの。気がすまないって言うか、仕事した感があるっていうか。リストの山ができるとさ、形になるでしょ、いちおう。リストめくってると、いかにも仕事してるように見えるでしょ。ね、みてくれもいいし、上司も怠けてないなって安心するでしょ。ね、ねっ。
ラインプリンターだと、ダッタダ、ダッタダ、ダダダダダダ、ダッタダってさ。小気味いいんだ。んで、自分のリストが出てくるのをボーっと待ってるの、マシン室で。あったかくてさ。リストもほっかほか。マシン室に何回も見にいったり来たりしてさ。サンダルでスタスタスタって。はだしの人もいたな。ペタペタペタって。今でも変わんないよねぇ。
なんの話をしてるんだ?