• 締切済み

バッチで118項目のCSVを処理したいですが。。。

バッチファイルで一行に、118項目のあるCSVファイルを読み込んで、必要な項目を抽出して、新しいCSVを作りたいです。 いろいろ調べたら for /f "delims=, tokens=1-3" %%I in (sample.csv) do ( echo %%I %%J %%K>> new.csv ) で実現できると思っていましたが、tokensに値の制限があって、tokens=1-118にすると、うまくいかないです。 どなたかいい方法をご存知でしたら、教えていただきたいですが。

みんなの回答

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.4

過去に同様の質問で回答しています→ http://okwave.jp/qa/q4939331.html の A No.3 の内容を再掲します。 for文の2重ループで分解する方法で、2,32,33,35項目を抜き出しているところが echo ![2]!,![32]!,![33]!,![35]! になります。 echo off setlocal ENABLEDELAYEDEXPANSION for /F "delims=" %%A in (sample.csv) do ( set n= for %%a in (%%A) do ( set /a n=n+1 set [!n!]=%%a ) echo ![2]!,![32]!,![33]!,![35]! ) endlocal

回答No.3

その他プログラミングの方がよさそうな質問ですね。 テキスト処理であればawkが良いと思います。Windows版もあるようですが、cygwinにも入っています。 cygwinを導入したとして説明します。 sh後 cat 対象ファイル名 | awk \ 'BEGIN { } { split $0,A,"," Print A[1] "," A[3] "," A[118: } END { }' > 出力ファイル名.csv とすれば、1,3,118列目が出力されます。 ご検討あれ。 ※最近のcygwinは改行コードが\n(0x0a)になっています。ファイルにする場合には注意してください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

for のヘルプを見ればわかるんだけど, 1つの for では最大 26個しか使うことができません (%a~%z, あるいは %A~%Z まで). だから「118個を同時に扱う」ことは「バッチファイル」では不可能です. 「バッチファイルでは」というのは, PowerShell では多分できるから. VBScript でもできるかも.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

本当に 118個全部必要なの? もし必要なら, (少なくとも「バッチファイル」では) 不可能.

falcomfans
質問者

お礼

ありがとうございます。もとのCSVファイルは118項目が有りますので、それを順番で読み込み、特定の列を新たなCSVに吐き出したいですね。バッチ以外で考えないといけないみたいですね。

関連するQ&A