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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

3回答

6739閲覧

コマンドプロンプト 行番号の出力について

momoko_sayaka

総合スコア13

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グッド

2クリップ

投稿2019/06/23 17:19

Windows10のコマンドプロンプトについて、正規表現で条件付けされたファイル内の文字列探索を行うバッチファイルを作成していて、指定した文字列を含むファイルのパスとその行番号を
「abc.txt 1
def.txt 2」
のような形で出力したいのですが、どうしても行番号だけを出力することが出来ません。findstrやfindだと対象行の内容も一緒に出力されてしまいます。何か良い方法はないでしょうか?教えて貰えるとありがたいです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

CMD

1for /f "tokens=1-2 delims=:" %%A in ('findstr /n 文字列 *.txt') do echo %%A %%B

投稿2019/06/23 20:51

otn

総合スコア84505

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

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

0

使いにくいWindows標準添付のツールで悩むより、unix系のツールをお勧めします。
https://s.webry.info/sp/vogel.at.webry.info/201606/article_4.html
で紹介されているbosyboxを使うと、次のようなバッチファイルが組めます。

rem test.bat @echo off for %%i in (*.txt) do ( busybox awk "/%1/{print NR \":\", FILENAME}" "%%i" )

実行例:

test.bat abc

投稿2019/06/23 20:41

編集2019/06/23 20:58
KojiDoi

総合スコア13671

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

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

0

追記
otnさんの回答がズバリだったので、以下の回答内容は無視してください。最後の「凝ったことがしたい場合は云々」の見解は変わりませんケド。


findもfindstrも出力結果を細かくカスタマイズする機能がないので、以下の2通りの方法を考える必要があります。

  1. 期待する出力結果を出すコンソールプログラムを探すor作る
  2. 出力結果を加工する

1がそのまま見つかればベストですが、標準のコマンドで該当するものがあるのかどうかは残念ながら知りません。(他の人が見つけてくれるかもしれませんが)

2についても、バッチ内での文字列操作を標準コマンドだけだと高度な文字列操作のコマンドは用意されていないため、ちょっと頑張る必要があると思います。

例えば

10: aaa 1: bbb 100: ccc

のように文字の桁が揃っている場合はこういうやり方で「1文字目から3文字目まで」と決め打てるので簡単に切り出したりはできるのですが、

10: aaa 1: bbb 100: ccc

のように揃っていない(可変の)場合は、切り出したい文字の開始位置と終了位置を特定するためにもうちょっと凝った事をやる必要があります。例えばこういうのを参考にしてサブルーチンを作り、文字列の桁を数値で取得するとか。

というわけで、頑張ればできるし、その方向でズバリの回答をしてくれる方もいるかもしれませんが、個人的にはそういう凝ったことがしたい場合はPowerShell等の高機能なシェルを使うことをおすすめします。(今回の質問のみなら解決できても、今後やりたい事が増えるたびにバッチだと苦労すると思いますので)

投稿2019/06/23 20:06

編集2019/06/23 21:06
gentaro

総合スコア8949

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問