• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:batファイルについて教えてください)

batファイルについての使い方

このQ&Aのポイント
  • batファイルを使用して、CSVファイルの特定の条件を満たすデータを処理する方法について教えてください。
  • batファイルを使って、CSVファイルの特定の列に含まれる特定の値を持つデータを処理し、結果を別のファイルに書き出す方法について教えてください。
  • batファイルを使用して、CSVファイルから特定の列のデータを取得し、条件に基づいて処理する方法について教えてください。

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

  • ベストアンサー
  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.2

No.1です。わかりました。 %c + %eとは足し算をしたいと言うことですね? で、あれば、コマンドプロンプトであれば、遅延環境変数と言うのをオンにした状態で出来ると思います。 cmd /v:on としてコマンドプロンプトを起動します。 for /f "tokens=1-5 delims=," %a in (hoge.csv) do echo %a %b %c %d %d >> hoge.txt & echo %c | findstr 3 && set /a ans=%c+%e & echo !ans! >> hoge2.txt で、結果はhoge.txtとhoge2.txtに格納されると思います。 バッチファイルであれば、以下の1行で遅延環境変数が有効になるため、 setlocal enabledelayedexpansion ここに記述すれば、遅延環境変数が使えると思います。 endlocal

その他の回答 (5)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.6

「バッチファイル」が目的ではなく、「コマンドプロンプトから実行」が目的なら、VBScriptとか、awk,perl等のスクリプト言語を使うと大分楽なんですが。 バッチファイルを使うにしても awk shori.awk nyuuryoku.csv 等とスクリプト言語の実行コマンドの入力を省くために使うとか。

  • deadend
  • ベストアンサー率62% (23/37)
回答No.5

バッチファイルの処理がMS-DOS/PC-DOS上やWindows 9x/Me上とWindows 2000/XP上とでは一部異なっています。 以下のバッチファイルは、バッチファイルの処理機能が強化されているWindows 2000以降での実行を前提としています。 (強化された機能を使用しているので、MS-DOS上やWindows 9x/Me上では正しく実行されません。誤使用を避けるために、ファイル名の拡張子を".cmd"にしておくと良いと思います。) なお、ご質問文中の >行全体を%%a、c列を%%c、e列を%%eへ代入 >a,b,c,d,e ⇒ %%a >c ⇒ %%c >e ⇒ %%e の部分は、for文の機能では%%aには最初の区切り文字の前までの文字列が入るので、行全体を環境変数 All、c列を環境変数 C、d列を環境変数 Dに入れ直して処理しています。 a,b,c,d,e ⇒All c ⇒C e ⇒D (環境変数の参照は、通常は %All%、遅延参照では !All! という書式になります。) ----- main.cmd (次の行から) ----- @echo off setlocal EnableExtensions setlocal EnableDelayedExpansion if exist "zenbun.txt" del "zenbun.txt" if exist "bassui.txt" del "bassui.txt" for /f "usebackq skip=1 tokens=1-5 delims=," %%a in ("original.csv") do ( set All=%%a,%%b,%%c,%%d,%%e set C=%%c set E=%%e echo !C! | findstr "3" && call subroutine ) set All= set C= set D= setlocal DisableDelayedExpansion setlocal DisableExtensions ----- main.cmd (↑まで)------ ----- subroutine.cmd (次の行から) ----- @echo off setlocal EnableExtensions setlocal EnableDelayedExpansion rem -------------------------- rem ここに必要な処理内容を記述 rem -------------------------- echo !All!>> "zenbun.txt" echo !C!,!E!>> "bassui.txt" setlocal DisableDelayedExpansion setlocal DisableExtensions ----- subroutine.cmd (↑まで) ----- ご質問文中の >%%c + %%e ⇒ bassui.txt の記述が、ANo.#1~4の回答にあるように、%%c と %%e を足し算して出力したいのであれば、8行目を set /a Ans=!C!+!E! echo !Ans!>> "bassui.txt" に変更してください。

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.4

No.1です。たびたびすみません。 for /f "tokens=1-5 delims=," %a in (hoge.csv) do echo %a %b %c %d %e >> hoge.txt & echo %c | findstr 3 && set /a ans=%c+%e && echo !ans! >> hoge2.txt これが、現状ベストのようです。(%dと%eを間違ってました)

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.3

No.1です。修正です。 for /f "tokens=1-5 delims=," %a in (hoge.csv) do echo %a %b %c %d %d >> hoge.txt & echo %c | findstr 3 && (set /a ans=%c+%e & echo !ans! >> hoge2.txt) 括弧でくくらないと正しくでませんね。

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.1

for /f "tokens=1-5 delims=," %a in (hoge.csv) do echo %a %b %c %d %e >> hoge.txt & echo %c | findstr 3 && echo %c %e >> hoge2.txt バッチファイルではないですが、コマンドラインから上記のような感じでいけると思います。 3を含むものにどのような処理を行いたいかによって変わってきます。 質問の意味を完全に把握している訳ではないので違うかもしれませんが。 ご参考まで。

関連するQ&A