• 締切済み

バッチで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

  • バッチでCSVを処理する時、空の項目があった場合

     例えば、以下のような二行からなるCSVファイルが有ります。 TK,001,A,DC, ,5,12 TK,002,B,DC,13,6,13   バッチで、このファイルを読み込んで、以下のようなレイアウトでCSVファイルを出力したいです。 TK,A, ,12 TK,B,13,13  しかし、一行目のデータに空の項目が発生していますので、 for /f "delims=, tokens=1-7" %%I in (sample.csv) do ( … )  で処理した場合、自動に、空の項目を飛ばし、次の項目を読み込みますので、出力ファイルは以下のようになってしまいます: TK,A,5 ,12 TK,B,13,13    こういうことを避けたいですが、なかなかいい方法が見つかりません。解決方法をご存知の方、教えていただけませんか?

  • バッチでcsvファイルの指定のカラムを編集したい

    バッチでファイルの編集をしたい バッチファイルを使用して、csvファイルの読み込み~編集を行いたいと思っております 元ファイル:TEST_DATA.csv 内容: 111,222,333,444,555 123,456,789,321,987 上記のcsvファイルを読み込み、 ・5カラム目が987ならば3カラム目を654に変更する という処理を実行させたいのですが、 どのように行えばよいのでしょうか? 現在考えていることは、 1.for文を使用して指定のカラムを抜く(3カラム目と5カラム目を抜く)) 2.5カラム目の値をif条件に指定し、合致した場合、抜いた3カラム目の変数に654を入れる 3.654に変更した変数を3カラム目の値として入れる という順番で行えばいいと思っているのですが、 下記まで行ったところで行き詰ってしまいました for /F "tokens=3,5 delims=," %%i IN (TEST_DATA.csv) DO @(if %%j==987 set %%i=654 echo %i %j ) お分かりになられる方、ご教授願えませんでしょうか

  • バッチでファイルの読み込み

    Windowsバッチでファイルの読み込みをしようと思っているのですが、 下記コマンドの実行で「ファイルが見つかりません」となります。 ※パスにスペースを含むのでusebackqを使用しました。 FOR /F "usebackq tokens=1,2 delims= " %%i in ("c:\temp 1\data.txt") DO echo %%i WindowsServer2003でうまくいかなかったのですが、 Xpですれば問題なくファイルを読み込めました。 何か差があるのでしょうか?

  • MS-DOSバッチファイルで

    度々ご教授お願い致します。 以下のようなMS-DOSバッチファイルで、xcopy コピー元 コピー先のようにしたいのですがこれではうまくいきません。 どのようにしたら良いでしょうか。宜しくお願い致します。 FOR /F "eol=; tokens=1,2 delims=, " %%i in (c:\a.txt) do (@echo %%i %%j) xcopy %%i %%j /s /o /y >> (@echo %%i %%j)

  • WindowsバッチのCSV読み込みについて

    WindowsバッチにてCSVファイルのデーターの読み込みを行いたいと考えています。 CSVの中身(test.csv)------------------------------------- "CN=test1,CN=users,DC=testdomain,DC=local","test1","aaa" "CN=test2,CN=users,DC=testdomain,DC=local","test2","bbb" 上記の取り込み方として、以下のバッチを実行しようとした場合、求めている結果になりません。 for /f "delims=, usebackq tokens=1-3 usebackq" %%i in ("test.csv") do echo %%i, %%k ○求める結果 "CN=test1,CN=users,DC=testdomain,DC=local","aaa" "CN=test2,CN=users,DC=testdomain,DC=local","bbb" ○得られた結果 "CN=test1,CN=users,DC=testdomain "CN=test2,CN=users,DC=testdomain ""(ダブルコーテーション)で括ったものを、ひとつのカラムとして受け渡したすことはできないでしょうか。よろしくお願い致します。

  • フォルダごとのファイル数を数えるためのバッチ

    フォルダごとのファイル数を数えるためのバッチをネットで調べて作成しました。 このバッチファイルを親フォルダ直下に配置し、ダブルクリックで実行しています。 ------------------------------------------------------------------------- @echo off setlocal enabledelayedexpansion set /a counter=0 dir %1 /ad /s /b >trash.csv for /f "tokens=1 delims=," %%i in (trash.csv) do ( set /a counter = 0 for %%A in (%%i\*) do ( if exist %%A ( set /a counter=counter+1 ) ) echo %%i : !counter! ) ------------------------------------------------------------------------- しかし、結果は、フォルダ名は取得していますが、ファイル数が取得できていません。 こんな感じです。 setlocal コマンドに無効なパラメータが指定されました d:\画像\フォルダ1 = 0 d:\画像\フォルダ2 = 0 d:\画像\フォルダ1\フォルダ3 = 0 どたなかどこが間違っているのかご指摘ください。

  • バッチファイルのFOR文について【tokens~】

    お世話になっております バッチファイルの、文字列操作で ---------------------------------------------------------- FOR /F "eol=; tokens=2,32 delims=, " %i in (myfile.csv) do @echo %i %j %k ---------------------------------------------------------- のtokensで指定している32列目(カンマが32個目)以降の値を 取得しません。 なぜでしょうか。 下記のHPを参照すると、一度変数をクリアしそのしたでさらにForで 指定すればよいとのことなのですが、欲しい値が多すぎて とても、Forのしたに何度書きたくありません。 http://folomy.jp/heart/?m=pc&a=page_c_topic_detail&target_c_commu_topic_id=12560 どのようにしたら、目的を果たせるのでしょうか。 ご教授ください。

  • バッチファイルで昨日の日付を取得

    すみません、どなたか教えて下さい。 バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。 今日の日付は下記のように取得しています。 rem 日時変数の取得 for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do ( set YYYYMMDD=%%a%%b%%c )

  • バッチファイル テキスト読込

    バッチファイルの中で、テキストを読み込んで、その中から 10文字分抽出する処理を行いたいのですが、テキストを変数に格納できません。 ヘルプ・ネットも見たのですが、やりかたが悪いのかできてない状況です。 何が悪いのかご教授お願いします。。 ↓ソース set testFile=test.txt For /F "delims=" %%i in (%testFile%) Do ( set readTxt=%%i set str=%readTxt:~10,10% echo %readTxt% echo %str% )

  • Windows2000 バッチファイルコマンドについて

    こんにちは。 バッチファイルコマンド(DOSコマンド?)について質問があります。 まずやりたい事としては、 「前月日付のフォルダを自動作成したい」 です。 当月日付をもってくる為には以下の様なコマンドでできました。 for /f "tokens=1-2" %%l in ('date /t') do set today=%%l for /f "delims=/ tokens=1-2" %%a in ('echo %today%') do set yymm=%%a%%b このコマンドを実行すると、例えば、%yymm%には200507が入っています。 このコマンドを応用して、前月日付(200506)を取得したいのですが、何か言い方法はありませんでしょうか? また、新たなやり方あるのでしたら教えて頂けないでしょうか?

専門家に質問してみよう