• 締切済み

MSDOSバッチで、入力文字列判定について

動作環境 OS:WindowsXP Home Edition SP3 コマンドプロンプト:Version 5.1.2600 テキストデータで、ある文字列位置から判定条件をして、マッチしたデータを別ファイルに出力するPGを組みたいと思っています。 ですが、出力されません。 ネット上で、検索しても、解決出来ません。 どなたか、ご指導願います。 ■現状DOSバッチ SET BEFORE=C:\BFILE SET AFTER=C:\AFILE FOR /F "delims=," %A IN (%BEFORE%) DO SET DATA=%A IF "%DATA:~10,4%"=="0001" %DATA%>%AFTER% ※%DATA%>%AFTER%の部分の前にECHOコマンドを付けても、結果は同様 1.現状 ・BFILE ABCDEFGHI0000JKLMN FGHIABCDE0001LMNJK DEFGHIABC0002NLJKM ・AFILE データ無し 2.理想 ・BFILE ABCDEFGHI0000JKLMN FGHIABCDE0001LMNJK DEFGHIABC0002NLJKM ・AFILE FGHIABCDE0001LMNJK

みんなの回答

  • parts
  • ベストアンサー率62% (6366/10151)
回答No.2

質問の条件を満たせばいいのですよね。 コマンドスクリプトでマッチした列の抽出なら、 Set Before=C:\BFILE Set After=C:\AFILE FINDSTR "0001" %Before% >%after% が簡潔かと思いますが・・・。 尚、特定の文字が含まれる列を除外する場合は、find /vで処理できます。 ついでに言えば、for /fでdelimsを使うときには、CSVファイルなどとは異なる区切り文字があるセル(タブでもスペースでもない区切り文字)に含まれる特定セルの文字列を条件抽出する場合に、使います。forで一発で該当の項目を抽出したいなら、そういう目的のコマンドとは言い難いので、後に別の人が編集するようなバッチ処理なら、下手に使わない方が良いですよ。 どうしてもForが良いというなら答えになっていませんが、一応上記のような回答になります。 尚、コマンドスクリプトは、PowerShellほど優れた処理はできません。そのため、一つに複数の命令をパイプさせると思った通りに動かないことや、目的の動きをしないことがあります。 よって、1行でなんとかしようとせず、多行で、複数のコマンドを組み合わせて処理するように考えるのが妥当です。

回答No.1

IF以下はSETの一部と判断されてるんじゃないですか? 複数の命令を記述する場合、括弧で括って1行1命令にするんじゃないでしょうか。 ちなみに、WindowsのコマンドプロンプトはMS-DOSやDOSじゃないので、MSDOSバッチとかDOSバッチという表現は使わない方がいいです。

関連するQ&A