バッチファイルで条件によって書き出さないようにしたい

このQ&Aのポイント
  • バッチファイルを使用して、temp.txtというファイルの4番目のカンマを比較し、同じ場合はテキストに出力しない方法を作成したい
  • バッチファイルで複数の括弧を使うことはできるのか
  • バッチファイルの条件分岐についての問題
回答を見る
  • ベストアンサー

バッチファイルで条件によって書き出さないようにしたい

temp.txtというファイルのカンマ4つめが同じだったらテキストに出力しないバッチファイルを作りたいと思っています。 set sbuf=test for /f "tokens=4 delims=, " %%a in (C:temp.txt) do ( set saddress=%%a if %sbuf% == %%a ( ) else ( set saddress=%%a findstr %saddress% C:\sip_cmail\ping_sip.txt >> C:\out.txt ) set sbuf=%%a ) と書いてみたのですが、動きません。 流れとしては、一巡目に通ったときの値をbufにいれておいて、二順目通ったときに比べ、同じだったら何もしないで次に行く、としたいのですが、、 括弧が何十にもなると出来ないのでしょうか。 よろしくお願い致します。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4835/10236)
回答No.1

初心者のうちは、for do の後は call にしたほうがいいです。あと文法エラーも少々あり。 set sbuf=test for /f "tokens=4 delims=, " %%a in (C:temp.txt) do call :sub %%a goto :eof :sub set saddress=%1 if %sbuf% == %1 ( rem ) else ( set saddress=%1 findstr %saddress% C:\sip_cmail\ping_sip.txt >> C:\out.txt ) set sbuf=%1 goto :eof

022722
質問者

お礼

ありがとうございます! 会社でテンパってて投稿しました。勉強します。 ありがとうございました。

関連するQ&A

  • バッチファイルで2行にわたるコマンドを入力したいのですが

    バッチファイルで複数行にわたるコマンドを打ちたいのですが、方法がわからなくて困っています。 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" "test%hinichi%01.txt" "test%hinichi%02.txt" ・・・・・・・ と31個のファイルを圧縮するバッチです。 体裁の問題ですが、 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" ? "test%hinichi%01.txt" ? "test%hinichi%02.txt" ・・・ としたいのですが各行のつなぎの記号?がわかりません。 ご存知の方、よろしくお願いいたします。

  • バッチファイル 文字列操作のやり方

    お世話になります。 バッチファイルのコマンドについてですが、 for文の中で 一番下の階層のファイル名の先頭5バイトが "abcde"のものだけ処理対象にしたいと考えています。 例えば、 C:\tempに以下のファイルがあったら C:\temp\abcdefg.txt    ・・・(1) C:\temp\xxxxxxx.txt    ・・・(2) C:\temp\abcde.txt    ・・・(3) C:\temp\abc.txt    ・・・(4) C:\temp\abcdezzzz.txt    ・・・(5) (1)、(3)、(5)だけを処理させたいと考えています。 実装方法として、以下を考えましたがうまくいきません。 dir /s /b /a-d C\Temp > file.txt for /f "delims=" %%F in (file.txt) do ( set A=%%~nF% if "%%A:~0,5%"=="abcde" ( <処理コマンド> ) ) おそらくfor文の中で何個も命令を記述できないということと、 パラメータ修飾子の指定が間違っているからだと思われますが、 うまくできない理由を知りたいです。 よろしくお願いいたします。

  • ファイルのバッチ処理について

    バッチ処理を勉強しているところです。 ひとつの問題が解決できていないので、わかるひとは教えて もらえませんか? C:\bom.txtがあって、C:\temp\a.txtとC:\temp\d.txt, C:\temp\a\a.txt と C:¥temp\b\e.txtもあります。 for でC:\bom.txtファイルとほかのファイルと再帰的に結合して、 ファイル名はそのままにしたいですが、 @set bomfilepath=C:\ 考えているバッチは以下のようになるが、失敗しました。 for /R %1 %%f in (*.*) do @( @rem echo %%f call copy /B %bomfilepath%bom.txt+%%f %%ftemp call del /Q %%f ren %%ftemp %%f ) 原因はどこですか?

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

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

  • バッチファイル(for文)がうまく動かない

    以下のようなバッチファイルをWin2008上で実行しようとしています ------------------------------ @echo on set LOGFILE=C:\a.log set CONF=C:\a.txt FOR /F "tokens=1-3 delims=," %%i in (%CONF%) do ( echo %%i %%j %%k > %LOGFILE% 2>&1 ) ------------------------------ C:\a.txtの中身はこのようになっています ------------------------------ a,b,c e,f,g ------------------------------ 期待する結果は「1.」なのですが.batを実行しても「2.」の結果がログに表示されます どのように修正すれば期待の結果が得られますでしょうか ※ちなみに.batの実行ではなくコマンドプロンプトで[%%]を[%]に変更すれば正常に実行できました 1. ------------------------------ a b c e f g ------------------------------ 2. ------------------------------ e f g ------------------------------

  • バッチ・ファイル中で時間をファイル名に使用したいです。

    いつもお世話になっております。 バッチ・ファイルを使用して、「netstat」コマンドの結果をファイルにリダイレクトし、そのファイル名に時間を使用したいです。 いま、使用しているファイルは、「バッチファイルA」と「バッチファイルB」の2つがあります。 「バッチファイルA」は0時~9時まで、「バッチファイルB」は10時~24時までとなっています。これを、1つのファイルにまとめたいのですが、よろしくご教示をいただけませんでしょうか。 --------------------------- @「バッチファイルA」(0時~9時) set TIME_A=%TIME% set TIME_B=%TIME_A:~1,4% set TIME_B=%TIME_B::=% set FILENAME=%TIME_B% netstat -s -e >C:\Temp\%FILENAME%.txt --------------------------- --------------------------- @「バッチファイルB」(10時~24時) set TIME_A=%TIME% set TIME_B=%TIME_A:~0,5% set TIME_B=%TIME_B::=% set FILENAME=%TIME_B% netstat -s -e >C:\Temp\%FILENAME%.txt ---------------------------

  • Windows バッチを Linux へ移植したい

    FOR 文を使ってテキストファイルの中身を変数に格納するバッチファイルがあります。 FOR /F "tokens=1,2* delims==" %%i IN (test.txt) DO SET %%i=%%j [読み込む test.txt の内容] HOGE=A FUGA=B HAGE=C 実行すると、%HOGE% には A、%FUGA% には B、%HAGE% には C が代入されます。 これと同じ処理を Linux のシェルスクリプト(bash)で実現するにはどうすれば良いでしょうか。 while read ~ でやるのかなと思ったのですが、変数の処理がピンと来なくて困っています。 どうかご教授ください。

  • バッチコマンドを作りたい

    MS-DOSでのバッチコマンドについての質問です。 パスを引数で指定して、そのパスのディレクトリ以下(サブディレクトリも含む)のファイル名を全て取得し、加工して表示するバッチを作りたいのですが・・。 例えばコマンド名を jcm をすると C:\>jcm C:\temp と入力すると(「C:\temp」は引数)、C:\temp以下(サブフォルダも含めて)にある全てのファイル名を取得し、ファイル名がA.txt,B.txtだったとすると java A.txt java B.txt のように加工して表示したのです。 バッチファイルの中身はどのように記述すればよいでしょうか?

  • forコマンドのdelimsオプションで「","」を指定したい

    以下のような データにコンマが含まれる(単価の項目)CSVファイルから 特定の列を抽出したCSVファイルを作ります。 "顧客ID","住所(送先)","商品ID","商品名","単価","数量","出荷日", "001","○○市○○町○○","202","□□","1,500","10","2009/7/7" "顧客ID","住所(送先)","商品ID","商品名","単価","数量","出荷日", "002","○○市○○町△△","503","◎◎","1,980","5","2009/7/6" 現在は以下のようなバッチファイルで対応しています。 @echo off :顧客ごとのヘッダ情報の行を削除 type syukjnminohyo.csv | find /v "顧客" > temp1.txt :ファイルデータを環境変数に代入し :subでデータの区切りである「","」をタブに変換 for /f "tokens=1,* delims=" %%a in (temp1.txt) do ( set line=%%a call :sub ) :タブを区切りとして特定の列を抽出 for /f "tokens=1,2,5,6 delims= " %%a in (temp2.txt) do ( @echo "%%a","%%b","%%c","%%d" >> out.txt ) :sub set line=%line:","= % echo %line:"=% >> temp2.txt 途中でファイルも作られるなど エレガントでない部分が多いため 皆様のお力をお貸し頂きたく質問いたしました。 よろしくお願いします。

  • バッチファイル フォルダ名をファイル名に置き換える

    ある複数フォルダに格納されているファイルを、フォルダ名に リネームするバッチファイルを作成したいです。 ●リネーム前 C:\リネーム\あいうえお\data.txt C:\リネーム\かきくけこ\data.txt C:\リネーム\さしすせそ\data1.txt C:\リネーム\さしすせそ\data2.txt C:\リネーム\たちつてと\data1.log C:\リネーム\たちつてと\data2.log C:\リネーム\なにぬねの\data.log ↓ ●リネーム後 C:\リネーム\あいうえお\あいうえお.txt C:\リネーム\かきくけこ\かきくけこ.txt C:\リネーム\さしすせそ\さしすせそ 1.txt C:\リネーム\さしすせそ\さしすせそ 2.txt C:\リネーム\たちつてと\たちつてと 1.log C:\リネーム\たちつてと\たちつてと 2.log C:\リネーム\なにぬねの\なにぬねの.log 知識がなく申し訳ありませんが、お助け願います。。 pause cd c:\リネーム dir /s /b C:\リネーム\ > file.tmp for /f "delims=" %%F in (file.tmp) do ( for /f "delims=\ tokens=3" %%D in ("%%F") do ( REN %%F C:\リネーム\%%D\%%D%%~xF )) del file.tmp pause どうもうまくいきません。。。