[前の記事]« 電源が切れてるPCをスキップしたい
[次の記事]標準出力に出された文字列をバッチファイル内の変数に入れたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR .. IN ( ) DO..」索引へ

[WIN2000] for in ( ) do .. の日本語(全角)文字処理にバグあり

471.
for文内の日本語について
2004年05月19日(水) 11時46分
ぽとす
 test.iniに記述してある設定を読み込んで変数に入れようと思い以下のコマンドを作成したのですが,Windows2000だと「FINDSTR:開くことができません(test)」と表示されます。
 検索文字列の「サーバ名」を半角英数字に変更すれば,「test.ini」のファイル名を正しく認識するようです。WindowsXPであれば問題なく動作するのですが,Windows2000には日本語を扱う場合に何か特別なルールがあるのでしょうか?


コマンド----------
for /f "tokens=2 delims==" %i in ('findstr "サーバ名=" test.ini') do set SERVNAME=%i

test.iniの中身----
サーバ名=test_serv

test.iniに記述しているのは,あるアプリからバッチを起動する再に引数が渡せないのでファイルを読むようにしています。
477.
Re:for文内の日本語について
2004年05月21日(金) 18時32分
oo
> test.iniに記述してある設定を読み込んで変数に入れようと思い以下のコマンドを作成したのですが,Windows2000だと「FINDSTR:開くことができません(test)」と表示されます。
> 検索文字列の「サーバ名」を半角英数字に変更すれば,「test.ini」のファイル名を正しく認識するようです。WindowsXPであれば問題なく動作するのですが,Windows2000には日本語を扱う場合に何か特別なルールがあるのでしょうか?


>コマンド----------
>for /f "tokens=2 delims==" %i in ('findstr "サーバ名=" test.ini') do set SERVNAME=%i

>test.iniの中身----
>サーバ名=test_serv

そんな馬鹿なと思ってやってみましたが、確かにそうですね。
現象としては、in ('  ') の中で2バイト文字を使うとその文字数だけコマンドの後が削られるようなので、明らかにバグでしょう。低スキルのプログラマが書いてテストされずに出荷されたんですね。
上記の場合だと4文字使われているので、.ini という4文字が削られてエラーになる。もし、testという名前の別内容の"サーバ名="を含んだファイルがあれば目に見えるエラーが起こらず、もっと異常動作したかもしれませんね。

対処としては情けないながら、
for /f "tokens=2 delims==" %i in ('findstr "サーバ名=" test.ini@@@@') do set SERVNAME=%i
のように4文字の生け贄を差し出すくらいでしょうか。空白、; , = のような、in ( ) の中で区切りに使われる文字は駄目です。

スクリプトをXPと共用、または2バイト文字の文字数が確定しない場合は、こんな↓感じで。
for /f "tokens=2 delims==" %i in ('findstr "サーバ名=" test.ini ^| findstr /v aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') do set SERVNAME=%i

こんなところにこんなバグがあるとは思いもしませんでした。
ちなみに、usebackq ` ` を使っても現象は同じです。
480.
Re2:for文内の日本語について
2004年05月25日(火) 00時17分
ぽとす
解答ありがとうございました。バグなんですか・・・
何か日本語を扱うオプションでもあるのかと思ってました。

>for /f "tokens=2 delims==" %i in ('findstr "サーバ名=" test.ini@@@@') do set SERVNAME=%i

こういう逃げ方は思いつきませんでした・・
しかし、申し訳ないですが、メンテナンスするときに混乱を招きそうなので、仕方ないですが半角で検索するようにします。
 
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年05月19日 11:56に投稿されたエントリーのページです。

ひとつ前の投稿は「電源が切れてるPCをスキップしたい」です。

次の投稿は「標準出力に出された文字列をバッチファイル内の変数に入れたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート