dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

DOSコマンドはほとんどわかりませんが、ファイル管理のため、何か一度にあるディレクトリ以下の多数のファイルの文字列を検索できるコマンドがあるかどうか探しております。
以下の方法であれば、一致するものも一致しないものも書き出されてしまうのですが、一致するもののみ書き出すためにはどうしたらよいか、よろしくご教授ください。

c:\>for /f "delims=" %i in ('dir /a-d /s /b c:\parent\childdocs\grandchild') do find /i /n
"KensakuTaisyo" %i

質問者からの補足コメント

  • 早速のレスありがとうございます。
    ”KensakuTaisyo”の文字列に一致する全てのファイル名と、指定した文字列を含む行の行番号を表示をしたいと思っております。それ以外は出力しないようにしたいのです。

      補足日時:2015/07/09 00:00
  • for /f "usebackq" %i in (`dir /a-d /s /b 検索対象パス`) do find /i "検索文字列" %i

    という"usebackq"を使ったものをネットで見つけましたが、どうやら機能しないようです。どうしてでしょう。。。難しいです。。。

      補足日時:2015/07/09 22:07

A 回答 (8件)

[★この部分が結果該当しない★] というのは、コマンドのエコーバックのことですか?


findstr のところを、@findstr に変えてください。

>"usebackq"を使ったものをネットで見つけましたが、どうやら機能しないようです
そんなことはないです。何かの勘違いでしょう。
    • good
    • 0
この回答へのお礼

artoo 様、ありがとうございます。

やっと、思ったような結果が得られました。
エコーバックというのですか、しりませんでした。恥ずかしいかぎりです。

for /f "delims=" %i in ('dir /a-d /s /b c:\parent') do @findstr /i /n "ng-click" %i NUL

しっかりと動きました。: ) 感謝

"usebackq"の件も、はっきりとはわかりませんが、どうやらダブルクォーテーションでパスを囲んでいたことが理由だったような気がします。その後、プロンプトがフリーズしたのでexitしてまた始めました。そして、

for /f "usebackq" %i in (`dir /a-d /s /b c:\parent`) do @findstr /i /n "ng-click" %i

で、思うような結果がえられました!
本当にうれしいです!

的確なご指示、本当にありがとうございました。!

お礼日時:2015/07/09 23:12

間違えて、同じ回答をしてしまいました。


したかった回答は、ファイル名:行番号:行の中身 を表示する方法を思いつきました。

for /f "delims=" %i in ('dir /a-d /s /b c:\parent\childdocs\grandchild') do findstr /i /n "KensakuTaisyo" %i NUL

・findstrに変える
・ファイル名として NUL を追加する
    • good
    • 0
この回答へのお礼

とても興味深く拝見させていただきました。ありがとうございます。

しかしながら、”[★この部分が結果該当しない★]”と書かれている部分を取り除くために四苦八苦しております。
これであれば、すべて読み込んだファイル名が出力されてしまうので、現在使っておりますものと同じ結果となります。

★いただきましたDOSプロンプトコマンド★★★★★★★★★★★★★★★★★
c:\>for /f "delims=" %i in ('dir /a-d /s /b c:\parent') do findstr /i /n "firstname" %i NUL

★結果★★★★★★★★★★★★★★★★★
c:\>findstr /i /n "firstname" c:\parent\childdocs1\gandchild1.php NUL
c:\parent\childdocs1\gandchild1.php:119: {{firstName}}
c:\parent\childdocs1\gandchild1.php:125: First Name: <input type=text ng-model="firstName2"><br>
c:\>findstr /i /n "firstname" c:\parent\childdocs1\gandchild2.js NUL
c:\parent\childdocs1\gandchild2.js:3: $scope.firstName = "Dareka",
[★この部分が結果該当しない★] ===> c:\>findstr /i /n "firstname" c:\parent\childdocs1\gandchild3.js NUL
[★この部分が結果該当しない★] ===> c:\>findstr /i /n "firstname" c:\parent\childdocs1\gandchild4.js NUL

バッチを書かなくても、なにか良い方法がないものか。。。少々意地になっております。

お礼日時:2015/07/09 22:03

> 該当する行数と数行の該当箇所のみが表示されていたのですが


>一致する全てのファイル名と、指定した文字列を含む行の行番号を表示をしたいと思っております。それ以外は出力しないようにしたいのです。
この2つは、全く違うことを言ってるのですが、同じことを言ってるつもりでしょうか?


> 該当する行数と数行の該当箇所のみが表示されていたのですが
ファイル名が不要で、行番号と該当箇所を表示するだけなら、質問文のものの find を findstr に変えれば良いです。

>一致する全てのファイル名と、指定した文字列を含む行の行番号を表示をしたいと思っております。それ以外は出力しないようにしたいのです。
だと、1行コマンドでは無理です。先の回答に書いたスクリプトが必要。
    • good
    • 0

ねんのためほそく.



ファイル名と一致する行番号と当該行を表示したいなら findstr 一発. たぶん for もいらん.
    • good
    • 0
この回答へのお礼

再度気にかけていただきまして、ありがとうございました。

お礼日時:2015/07/09 22:03

> 該当する行数と数行の該当箇所のみが表示されていたのですが


>一致する全てのファイル名と、指定した文字列を含む行の行番号を表示をしたいと思っております。それ以外は出力しないようにしたいのです。
この2つは、全く違うことを言ってるのですが、同じことを言ってるつもりですか?


> 該当する行数と数行の該当箇所のみが表示されていたのですが
ファイル名が不要で、行番号と該当箇所を表示するだけなら、質問文のものの find を findstr に変えれば良いです。

>一致する全てのファイル名と、指定した文字列を含む行の行番号を表示をしたいと思っております。それ以外は出力しないようにしたいのです。
だと、1行コマンドでは無理です。先の回答に書いたスクリプトが必要。
    • good
    • 0

バッチスクリプトを作って、



@echo off
set X="KensakuTaisyo"
for /f "delims=" %%A in ('dir /a-d /s /b c:\parent\childdocs\grandchild') do find /i %X% "%%~A" >NUL && (
echo ====%%A====
for /f "delims=:" %%B in ('findstr /i /n %X% "%%~A"') do echo %%B
)
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。

以前、使っていたものは検索結果のファイル名、該当する行数と数行の該当箇所のみが表示されていたのですが、アクシデントでその一行コマンドをなくしてしまいました。
一番近いものをと上記のコマンドを書いたのですが、検索結果に該当しないファイル名まで長々と表示され、ディレクトリを絞らない限り、プロンプトのがいっぱいになってしまいます。
できれば、その以前使っていたバッチでないものを探し当てたいのですが。。。

お礼日時:2015/07/09 00:59

ん~, 「ファイル名と行番号のみ」は単純じゃないねぇ. 当該行も表示していいなら簡単なんだけど....



まあ, とりあえず findstr (があれば) でも使ってみたらどうだろうか.
    • good
    • 0
この回答へのお礼

ありがとうございます。検討してみます。

お礼日時:2015/07/09 01:00

確認だが「一致するもの」の「もの」ってなに?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!