質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

2回答

19939閲覧

バッチ:特定の文字列を含む行の「次の行」を取得

cho

総合スコア23

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2018/07/25 08:11

バッチファイルを作成し、複数のテキストファイルから特定の文字列を含む行の次の行を取得したいと考えています。
(一旦試験的にコマンドプロンプトでコマンドを実行しています)

cmd

1//対象のファイル名が記載されたリストを事前に作成 2findstr /f:file.list "Surname" 3//結果 4hoge1.txt:aaSurname 5hoge2.txt:bbbSurname

上記のように「特定の文字列を含む行」は取得できるのですが、「次の行」の取得方法がわかりません。
ご教示いただければ幸いです。

cmd

1//理想の結果 2hoge1.txt:aaSurname 3hoge1.txt:TANAKA //「Surname」の次の行 4hoge2.txt:bbbSurname 5hoge2.txt:suzuki//「Surname」の次の行

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

WindowsならPowershellを使いましょう。

PS> Select-String -Path "file.list" -Pattern "Surname" -Context 0,1

投稿2018/07/25 12:43

編集2018/07/25 21:18
hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cho

2018/07/25 13:05

回答ありがとうございます。Powershell思いつきませんでした・・。 ご提示いただいたコマンドだと、次の行だけでなく、1つ前の行も取得してしまうようですが、確認頂けますでしょうか。
cho

2018/07/25 13:58

すみません、自己解決しました。前後のパラメータを指定できるのですね。
hichon

2018/07/25 21:19

訂正しました。
guest

0

バッチファイルでは苦手な処理ですね。他のツール、言語を使った方が良いと思います。

ファイルの中に、コマンドプロンプトの特殊文字が含まれていない前提が要りますが、

DOS

1for /f %%F in (file.list) do call :FILE "%%F" 2goto :EOF 3 4:FILE 5set FLAG=FALSE 6for /f "tokens=* eol=" %%L in (%~1) do call :LINE %1 "%%L" 7goto :EOF 8 9:LINE 10echo %2|findstr "Surname" >NUL 11if ERRORLEVEL 1 ( 12 if %FLAG% == TRUE echo %~1:%~2 13 set FLAG=FALSE 14) else ( 15 echo %~1:%~2 16 set FLAG=TRUE 17) 18goto :EOF

テストはしてません。

別案としては、findstr /nで行番号を出してそれを元に何とかする。

投稿2018/07/25 12:06

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cho

2018/07/25 12:13

早速回答ありがとうございます。 どうやらうまくいかないみたいです・・(特殊文字が含まれているファイルもあるため) VBAでもできないか試行錯誤しているのですが、VBAはほとんど携わったことがなく苦戦中です。 別途「テキストファイルからExcelへの条件付き出力」で質問させていただいているのでもし知見がありましたら、お力添えください。
otn

2018/07/25 12:20

別案の「findstr /nで行番号を出してそれを元に何とかする。」であれば特殊文字があっても大丈夫だと思いますが、処理が複雑すぎて大変なので、やっぱり別の言語がいいですね。 PowerShell、VBScript、JScript とか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問