仕事が上手くない

しゃあないので早めに引継ぎ&引揚げるため稼動しているプログラムの仕様書書きに没頭。趣味的。運用バッチでこんなまじめに仕様書書くのは何年ぶりか。


Windowsバッチも使えりゃなかなか楽しいし、案外高機能な部分もあるにはある。
実はWindows標準機能のみを使ってバッチで圧縮アーカイブ作る方法がないとか、微妙に使えないところがあるのはさすがにUnixに及ばずだけど、たとえばドラッグアンドドロップで指定したフォルダ内のmp3ファイル拾ってm3uファイル作る、とかはわざわざvbsとか使って云々とやるよかWindowsバッチで作ったほうが簡単。



@echo off
if not exist %1\"@%~n1.m3u" (
for /F "usebackq tokens=*" %%i in (`dir /b %1\*.mp3`) do (
echo %%i>>%1\"@%~n1.m3u")
)
)

しまったこの例だとわざわざ for 文使ってまわしているのさえ無意味・・まあいいや。


・・あれ、試してみるとなぜかフォルダ名に全角スペースが含まれている(例えば "松崎しげる ベスト")と正しく動作しない。半角スペース(例えば "The Best of Shigeru Matsuzaki")は大丈夫なのに。
どうもドロップしたフォルダをバッチの引数として受け渡す時に、フォルダに半角スペースが含まれる場合は自動でフォルダ名両端にダブルクオートを付加してくれるらしいのだけど、全角スペースだとダブルクオートが付加されない。それなのに %1 は全角スペースを半角と同じ引数のデリミタとして解釈しちゃうらしくて、展開後の文字列は全角スペースの前までだけになってしまう(先の例だと "松崎しげる" まで)。Windows Server 2003 SP1まで試してみたけどやっぱり同じだった。あらー?これってWindowsのバグじゃないっスか Microsoft様。


はー、人生は無意味だ・・とは思ってやんない。