*Win2000のfor /f %A in ('command ....') の日本語処理のバグ [#gd9e7e3e]

 for /f %%A in ('echo あいう123456789') do echo %%A
 for /f %%A in ('echo あ123456789') do echo %%A
では、それぞれ、「あいう123456789」「あ123456789」が表示されるはずだが、実際には、「あいう123456」「あ12345678」が表示される。(' ') の2バイト文字の数だけ (' ') 内のコマンド末尾から文字が削られるようだ。かといって空白を末尾につけても無駄で同じ結果に終わる。空白だけでなく、セミコロン、カンマ、イコールなどの in ( ) 内リストの区切り文字も駄目。また、usebackq と ` ` を使った場合も同じである。
現実的には、

 for /f "delims=" %%A in ('find "日本語" filename') do ....
のようなケースで問題になるだろう。2バイト文字の数が分かっていれば、

 for /f "delims=" %%A in ('find "日本語" filename@@@') do ....
のようにその数だけ余分の文字をあらかじめ末尾に付けて置けば良いが、2バイト文字の数が不明の場合(及びWin2000とWinXPで共通に使う場合)は、例えば、

 for /f "delims=" %%A in ('find "%STR%" filename^|findstr /v qwertyuiopasdfghjkl') do ....
のように末尾からある程度文字が消えても良いようにする必要がある。もうちょっとましな手段は無いものか?

WinXPでは直っているのにWin2000の最新SPでも直っていないということは、直す気が無いということだろう。初歩的過ぎて情けないバグである。
////////////////////////////////////////////////////////////////////////////

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS