• ベストアンサー

Windows batで指定した行のみ値を取得

Windows batで指定した行のみ値を取得したいのですが、うまく取得できません。 <CSVデータの内容> 0002 10,11,19,12,15,1192 ,0,00 10,11,20,17,30,1192 ,1,00 <実行bat> REM データ取得 FOR /F "tokens=7-9 delims=," %%i in (dakoku_data.csv) DO SET C=%%i%%j これを実行すると、 C = 000 C = 100 となってしまい、最終行の値だけが格納されてしまうので、 指定した行の値だけ、取得するには、どうしたらよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • crossgate
  • ベストアンサー率65% (78/119)
回答No.1

どうやって行指定するかは分かりませんが、こんな感じでどうですか? @ECHO OFF REM 取得したい行数-1を指定 SET LINE=1 REM データ取得 FOR /F "tokens=7-9 delims=, skip=%LINE%" %%i in (dakoku_data.csv) DO ( SET C=%%i%%j GOTO EXIT_FOR ) :EXIT_FOR ECHO %C%

sn1108
質問者

お礼

crossgateさん、ありがとうございました。

関連するQ&A

  • windows batの一部分を繰り返し実行したい

    以下の部分を繰り返しbatで実行したいのですが、どうすればよいでしょうか? REM 取得したい行数-1を指定 FOR /F "tokens=1-9 skip=%LINE%" %%i in (dakoku_data.csv) DO ( SET B=%%i%%j%%k%%l%%m%%n%%o%%p%%q ECHO %%i%%j%%k%%l%%m%%n%%o%%p%%q>>insert.txt GOTO EXIT_FOR ) :EXIT_FOR ECHO %B% FOR /F "tokens=7-9 delims=," %%i in (insert.txt) DO set RR=%%i%%j if %RR%==000 FOR /F "tokens=1-3 delims=," %%i in (insert.txt) DO set C=20%%i-%%j-%%k if %RR%==000 FOR /F "tokens=4-5 delims=," %%l in (insert.txt) DO set D=%%l:%%m:00 if %RR%==000 FOR /F "tokens=6 delims=," %%i in (insert.txt) DO set E=%%i REM MySQL PATH set PATH="C:\Program Files\MySQL\MySQL Server 5.0\bin" REM CHARACTER ECHO set character set sjis;>__sql.sql REM if %RR%==000 ECHO INSERT INTO `XXX` VALUES ('%E%','2011-11-15 14:33:19', '%C%', '0', '%C%', '%D%', , '8',null, null, , '8', '1', '1', null, '', null);>>__sql.sql

  • バッチで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 ) お分かりになられる方、ご教授願えませんでしょうか

  • コマンドプロンプトのコマンド処理が途中で終了する

    メインbat内にサブ1bat、サブ2batが存在し以下構成になっています。 (サブ1batで作成したデータを用いてサブ2batの処理を行います。) 問題は メインbatを実行した場合、サブ1batが実行された後にサブ2batが実行されず終わってしまいます。 (メインbatにサブ1batだけ、メインbatにサブ2batだけだと、各々問題なく処理が行われることは確認。) 以下、メインbat処理----------------------------------- setlocal enabledelayedexpansion FOR /f "delims=, tokens=1-3" %%i in (テキストファイルパス) do ( IF "%%i"=="1" ( サブ1bat %%j %%k ) ) endlocal setlocal enabledelayedexpansion FOR /f "delims=, tokens=1-3" %%i in (テキストファイルパス) do ( IF "%%i"=="1" ( サブ2bat %%j %%k ) ) endlocal ---------------------------------------------------- ※テキストファイルパスはループのもとになっているcsvファイルです。 ※各サブbatは戻り値を返しません。 他の作業の合間に調べたりしているのですが一向に直せず困っています。 ご助力いただけると大変助かります。

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

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

  • バッチで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にすると、うまくいかないです。 どなたかいい方法をご存知でしたら、教えていただきたいですが。

  • batファイルでファイルの件数取得

    batファイルでカレントフォルダ内のCSVファイルの件数を取得したく、 以下のbatファイルを作成しましたが、件数が多いと若干のズレがでます。 どこがダメなのでしょうか?ご教授お願いします。 for /f "usebackq" 55i in(`dir /B /S *.csv`) do ( SET /P<NUL=%%i: type %%i | find /c /v "" )

  • .batの実行に失敗する

    下記のコマンドを記載した.batファイルを作成し、実行しようとしております --battest.bat for /F "tokens=5 delims=," %i IN (1date_mgm.txt) DO @(if /i "%i"=="2" echo %i >2teteet.txt) --1date_mgm.txtの中身は以下の通りです file_1,20141025,0,0,0 file_2,20141025,2,2,2 これをコマンドプロンプトで実行すると、以下の結果となります。 (1)コマンドプロンプトに直接for文を記載  ⇒2teteet.txtが作成され、結果(2)が表示される (2)battest.batファイルを直接実行  ⇒2teteet.txtが作成されない   (管理者として実行を行っても同一の結果になります) (3)コマンドプロンプトにドラッグして実行  ⇒使い方が誤っていますと表示される。 これを常に2teteet.txtを作成させたい(正常な結果)のですが、 どのようにすればよいのでしょうか

  • バッチファイルの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 どのようにしたら、目的を果たせるのでしょうか。 ご教授ください。

  • Windows bat でCSVデータを処理したい

    <CSVデータの内容> 0004 10,11,19,12,15,1192,0,00 10,11,20,17,30,1192,1,00 10,11,21,01,00,1193,0,00 10,11,22,20,00,1193,1,00 (1)CSVデータの行ごとに、7番目と8番目の値が0,00の場合、10,11,19を取得して値をDBにインサートしたい。 (2)CSVデータの行ごとに、7番目と8番目の値が1,00の場合、10,11,20を取得して値をDBにインサートしたい。 このような処理をするには、どうしたら、良いでしょうか?

  • windows bat 置換

    master.csvの内容 11111,eeeeee,55555 for /f "delims=" %%A in (master.csv) do call :sub1 "%%A" del master.csv ren master6.csv master.csv goto :eof :sub1 set "LINE=%~1" echo %LINE:,=2C%>>master6.csv 以上のようにカンマを2Cに変換し、改行コード(CR)(LF)を0D0Aに変換したいのですが、 どうしたらよいでしょうか? また、同時に実行することは可能でしょうか?