コマンド DIRの動作について
BY qoo288 / DATE 2010-05-21 02:53:30 / ID 2432 / VIEW 1028
コマンド DIRの動作について
バッチファイルのDIRコマンドでよく分からない事が
あるので、ご存知の方、ご教授願います。

あるフォルダ(仮にC: estとします。)の中に1行だけ記述された
CSVファイルが大量にあります。
これをCOPYコマンドで1ファイルにまとめたいと思います。

しかし、そのフォルダの中にはサブディレクトリがあり、その中にも
COPYコマンドの対象としたいCSVファイルがあります。
COPYコマンドはサブディレクトリまで処理対象としてくれない
ようですし、サブディレクトリの数は不特定なので、どうしょうかと
困っていたら、あるWebページを見つけました。
ttp://www.fpcu.jp/dosvcmd/bbs/log/copyxcopy/4-1567.html

やりたい事はまさにドンピシャで、そのページのコマンドを
自分流に書き換えつつ、完成したのが、以下のコードです。

MKDIR "C: est2"
XCOPY "C: est*.csv" "C: est2" /E /Y
for /f %%a in ('dir "C: est" /b') do XCOPY "C: est\%%a*.csv" "C: est2" /E /Y
COPY "C: est2*.csv" "C: est2log.csv"
※変な所で改行が入って見難くなっていたらゴメンナサイ。

上記、コードで試してみた所、WindowsXPでは問題なく動作しました。
しかし、Windows2000で試してみた所、うまく動きませんでした。
PAUSEコマンドを入れて、どんなコマンドが吐かれているのか見たら
サブディレクトリを動的に変えようとしてい%%aの中に「ドライブ」
とか「ボリューム」とか入ってくるのです。最初は意味不明でしたが
DIRのbオプションを付けない時に、そういう文字がコマンドプロンプト
の画面に表示され、それを取得しているんじゃないかという事に
気づきました。ちなみにWindows2000でもDIR C: est /bとやると
フォルダ名、ファイル名しかコマンドプロンプトの画面には表示されません。

気づいたはいいんですが、解決方法が分かりません。
どなたか、コマンドに詳しい方、ご教授ください。
よろしくお願いします。
pita-goraさんからのお返事です
ID:2433 POST:2010-05-21 02:53:37
こんばんは。
ご相談では仮に、C: estとされていますが、実際はディレクトリ名に漢字ひらがななど2バイト文字を使われてませんか?
同じwww.fpcu.jpの中にWindows2000 のfor文に関するバグについて記載されたエントリーがあります。もし該当するようでしたら回避方法も出ていますのご確認下さい。

[WIN2000] for in ( ) do .. の日本語(全角)文字処理にバグあり
http://www.fpcu.jp/dosvcmd/bbs/log/cat3/for_in_do/3-0471.html