以下の要件を満たすbatファイルを作成したいと思います。

・5区切りのCSVファルイを以下のように変数に代入する
 読み込みファイル例
列 a , b , c , d , e
111,222,333,444,555
111,222,222,666,777
111,111,123,888,999

行全体を%%a、c列を%%c e列を%%eへ代入
a,b,c,d,e ⇒ %%a
c ⇒ %%c
e ⇒ %%e

・%%cに3を含むものを確認したい
・if文を使用に3を含むものを処理対象にしたい
・3を含むものに処理を行った後それぞれ以下のようにファイル書き出しを実施したい。

    %%a ⇒ zenbun.txt
%%c + %%e ⇒ bassui.txt

・処理終了

forやifを使うんだろうなぁ、、程度しかわからず全く詳細な構成がわかりません。
どなたか教えていただけませんでしょうか?
よろしくお願いします。

A 回答 (6件)

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
    • good
    • 0

「バッチファイル」が目的ではなく、「コマンドプロンプトから実行」が目的なら、VBScriptとか、awk,perl等のスクリプト言語を使うと大分楽なんですが。



バッチファイルを使うにしても
awk shori.awk nyuuryoku.csv
等とスクリプト言語の実行コマンドの入力を省くために使うとか。
    • good
    • 0

バッチファイルの処理が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"
に変更してください。
    • good
    • 0

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を間違ってました)
    • good
    • 0

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)

括弧でくくらないと正しくでませんね。
    • good
    • 0

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を含むものにどのような処理を行いたいかによって変わってきます。
質問の意味を完全に把握している訳ではないので違うかもしれませんが。

ご参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング