以下の要件を満たす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を見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qこれは目の病気ですよね?Σ

これは目の病気ですよね?Σ

一年前くらいから左目まぶたらへんがぽこっとなっているのに気づきました。
親に相談したら「ばくがんなんたら」など言われていずれなおる言われたんですが、最近黒くなってきてしまいました
心配ですΣ

目の深刻な病気なんでしょうか是非教えて下さい:

Aベストアンサー

こんにちは

眼科ではなくて皮膚科で見てもらうといいですよ

Q以下のようなbatファイルを作りたいのですが

以下のようなbatファイルを作りたいのですが、可能でしょうか。

・シリアルNoとMACアドレスを表示させる
・その値をデスクトップに作ったファイルに書き出す
・書き出す際に、必要な項目だけ書き出す(ipconfig /allを書き出すのではなく、1番目に出てきた物理アドレスのみを書き出す。)
・書き出す際に値だけではなく、文章を付け足す(たとえばシリアルNoが12AFDAEだったら、12AFDAEだけを書き出すのではなく、「このパソコンのシリアルは12AFDAEです」のように書き出したいのです)

可能であればどのように作ればよいか教えてください。
よろしくお願いします。

Aベストアンサー

WMIとかVBSとかならできると思いますよ。
下記をメモ帳などにコピペして、適当な名前.vbsで保存後、実行するとOS情報が取得できます。

'=== OperatingSystem
Set OSSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery( _
"SELECT Caption,CSDVersion,SerialNumber FROM Win32_OperatingSystem")
For Each obj In OSSet
WScript.Echo "OS名= " & obj.Caption
WScript.Echo "サービスパック番号= " & obj.CSDVersion
WScript.Echo "このパソコンのシリアルは= " & obj.SerialNumber
Next


googleなどでvbs MACアドレス で検索すれば結構出てくるので参考になさってください。

Q目の病気 ここ3日ぐらい朝起きると目の下?の下のまつげのところにめっちゃ目やにがつきます 小さい時

目の病気

ここ3日ぐらい朝起きると目の下?の下のまつげのところにめっちゃ目やにがつきます
小さい時からそうゆうのがあったので気にしてなかったのですが、今ふと目を見たら左目の左下一部が赤くなってます…
こんなこと初めてで少し心配です
痛いのかな?痛みはないと思います
寝不足で目がしょぼしょぼはします。
言われると、違和感はあるかも?
でも全然気にならないです

これは何か病気なのでしょうか?
眼科に行くのも怖いです…

Aベストアンサー

眼科にいってください(^^)

全然怖くないですよ

多分ですが病気ではないです
目にトラブルがあると思います

目薬で治る程度だと思いますよ

だけど放置すると
瞼全体が腫れることも

先日私は放置してお岩さんになりました(笑)
だけど目薬と塗り薬だけで治りましたよ

目は大切な部分なので
絶対に放置しないで
月曜日に眼科に行って目薬もらってくださいね

デキモノが出来ている時は
ドラッグストアの目薬ではダメですよ

眼科行くと
安心しますよ

お大事に

QBATファイル作成時の記述について

windows xp proの環境下で、次の一連のコマンドを実行するためのBATファイルを作成する場合どのように記述すれば良いか教えて下さい。「ipconfig /release」
「ipconfig /renew」
「arp -d *」
「nbtstat -R」
「nbtstat -RR」
「ipconfig /flushdns」
「ipconfig /registerdns」
これらのコマンドは、ネットワークの修復機能を実行した場合に行われるものなのですが、一定時間毎に自動実行を実現するために、BATファイル作成を行うものです。

Aベストアンサー

★単純に上から順に記述すれば良いと思います。
・全部、実行可能なコマンドですよね。
 それならばメモ帳などを開き、上から順にコマンドを記述して拡張子を『bat』とすれば良い。
・1行目に『@echo off』という1行を記述すると実行時の画面が少しすっきりする。→記述しなくてもOK!

●内容(auto.bat)
@echo off
ipconfig /release
ipconfig /renew
arp -d *
nbtstat -R
nbtstat -RR
ipconfig /flushdns
ipconfig /registerdns

最後に:
・上記の8行を記述して保存すれば出来上がります。
・以上。おわり。

Q母が網膜中心静脈分岐閉塞症という目の病気にかかってしまいました

母が網膜中心静脈分岐閉塞症という目の病気にかかってしまいました。

他にも母はうつ病、C型肝炎、過去にはくもまっか出血などいろいろな病気があります。最近暗くなってしまって見ているだけで張り裂けそうです。

網膜中心静脈分岐閉塞症は左目だけです。病気じゃない目も視力は0,04くらいです。両目とも多分、今は0,03~0,04くらいです。

母はテレビを見るのが唯一の楽しみでしたので、今はテレビもぼやけてしまっている状態です。

何か、良い方法(食事、生活面など)はないでしょうか?

何とか、テレビだけでも見れるようにしてあげたいです。

ご面倒ですがよろしくお願い致します。

Aベストアンサー

音楽関係の趣味を薦めてみては?
うちのお爺ちゃんも似たような病気で視力がガタガタになってしまいましたが、その頃からラジオや音楽を楽しむようになりました。
また、叔母のお母さんは全盲ですが、カラオケ教室の先生をやってます。

QBATファイルの作成方法について

初めてBATを作成する事になったのですが、こんなBATを作りたいのですがイマイチ分からず、
例えば:
C:\にある○○のファイルと、
C:\WINDOWSにある○○のファイルを比較して、

もし、なければ、

C:\data\○○.exeを実行する

もし、あれば

C:\data\○○.exeを削除する

更に分かりましたら、
このファイルを実行する際に、
Windows修正プログラムに含まれている、update.exeのコマンドスイッチも付加できればありがたいのですが、

お分かりになる方どうか教えて下さい。

宜しくお願いします。

Aベストアンサー

このような内容の投稿。前にもありましたね。気に入らなかったのでしょうか。

この手の、DOSコマンドレベルでの操作はパフォーマンスが悪く、それを考量した形にしないと、結構時間がかかります。

まず、比較対象元のリストを最初にテキストファイルにしておく事です。そのファイルに有るリストされているファイル名について、比較対象先のフォルダー以下を検索すると言うシナリオが最も簡単に考えられる方法です。

最初にそのような単純な物を一度作成しましょう。

ツリー構造のファイル名を取得するには for, dirなどを使うといいでしょう。

これをリダイレクトを使用し、

(for () do) > list.txt

などとすればいわけです。

それから、リストからファイル名を取得するのも for コマンドで用はたります。

for () do (
検索用スクリプト
)

書式は
for /?
dir /?
cmd /?
if /?
goto /?
call /?

で調べてください。丸投げしないで、自分で考えましょう。

Q緑内障(目の病気)について

緑内障(目の病気)について、具体的にどのような病気なのでしょうか。
市町村の健康診断で緑内障について行っているところはあるのでしょうか。

Aベストアンサー

岐阜県多治見市の市民病院が市民に限り無料検査を行っているようです。
(参考URLのお問い合わせ欄参照)
他の自治体は有料での検査を行っているところが多いようですね。
(予算の関係上仕方ないのでしょうね)
また医師から指示があった場合無料で検査するという様なところを見かけましたが、意味がない様な・・・。(^_^;
緑内障のことを良く知らないまま発病・進行そして失明してしまう方が大勢いますので、できたら無料で、腰の重い市民が少しでも多く検査に訪れてくれる様になったら良いですね。

参考URL:http://www.tbs.co.jp/hanamaru/medama/001025.html

QWindows7(64bit)コマンドプロントによるBATファイル作成

ネットで調べた結果、以下コードに辿り着きました。
特定のファイルを別のディレクトリへ繰り返しコピーをさせます。
その際、1つごとにコピーが完了された時間をlog.txt中にミリ秒まで表示させたいのですが、以下ですと全て同じ時刻となってしまします。
echo %time% nul > "%~dp0\copy_log.txt"
set /p copy_drive="コピーするドライブを指定してください。:ドライブ = "
set /p copy_count="コピーする回数を指定してください。:回数 = "

FOR /L %%I IN (1,1,%copy_count%) DO COPY %1 "%copy_drive:~0,1%:\%~n1_%%I%~x1" | echo %time% nul >> "%~dp0\copy_log.txt"
PAUSE


目的は1コピーにあたり要した時間を知りたいので1つのコピーが完了した時間を取得できればと考えています。
何方かご教授頂ければ幸いです。

Aベストアンサー

https://oshiete.goo.ne.jp/qa/5643201.html
これと同じでしょう。

Q右目が痛く、胸?が気持ち悪く、頭も痛いです。病気ですか?風ですか?

右目が痛く、胸?が気持ち悪く、頭も痛いです。病気ですか?風ですか?

Aベストアンサー

とりあえず
目が重要なので眼科で見てもらってください

異常がなければ頭痛外来のある病院で見てもらうといいですよ
頭蓋骨の中なのでどこが原因か一つ一つ探していくしかないです

Qbatでファイル名を変更したい(元ファイル名の一部を削除したファイル名に)

batファイルを使ってファイル名を変更する方法を教えてください。
例えば、
変更元ファイル:tata1234.exe
変更先ファイル:tata.exe(元ファイル名の一部を削除した名前)

流れでは、あるファイルをbatにドラッグ&ドロップして
COPY %1 %TMP%\%~nx1
REN %TMP%\%~nx1 ???????
変更したファイルを元ファイルのあったフォルダに移動(orコピー)

別ファイルに出力したりしないと無理でしょうか?宜しくお願いいたします。

Aベストアンサー

元ファイル名の先頭4文字まで残して5文字目以降を消すということでいいでしょうか。

set NAME=%~n1
REN %TEMP%\~nx1 %NAME:~0,4%.%~x1

>変更したファイルを元ファイルのあったフォルダに移動(orコピー)
これはどういう意味?変更とは?


人気Q&Aランキング

おすすめ情報