1

BATCH でドライブ内のファイルを検索しようとしているので、次のコマンドを使用しました。

DIR c:\directory\* /s/b | FIND "filename.txt"

問題は、ファイルを見つけても検索が続くことです...そのため、少なくとも1つの結果が見つかった後に検索を停止するパラメーターまたは何かがあるかどうか疑問に思っていました.

編集

私は何かをしようとしていた

FOR %%G IN (DIR c:\directory\* /s/b | FIND "filename.txt") DO copy %%G 

次に、コピー コマンドが完了したら、別のコマンド ラインを追加してループを終了します。

4

5 に答える 5

0

結果を取得した後にCtrl+CをDIRに送信するなどの巧妙なトリックがあるかもしれませんし、Windows Powershellが役立つかもしれませんが、私はそれを疑っています。また、結果の数を制御するためのパラメーターがわからないし、存在しないと思います。

このようなことをしたい場合は、お気に入りのプログラミング言語を使用してそこで実行してください。バッチスクリプトは強力ですが、複雑すぎるものや、ソリューションについて考えるのに時間がかかりすぎるものもあります。

ちなみに、このようなFIND操作を頻繁に行う場合は、次のようなことをお勧めします。

 REM Script to build a filename index for all your drives

 DIR C:\* /s /b > index.txt
 DIR D:\* /s /b >> index.txt
 REM ...more drives here

 REM And you might want to compress index.txt afterwards

その後、時々インデックスを再作成しなければならないかもしれませんが、はるかにFIND高速なインデックス内のファイルだけを作成できます。

于 2011-08-09T18:40:27.637 に答える
0

ループを秒単位で制限することはできませんが、ループする回数を制限できます。次の例があなたの特定の問題に関連しているかどうかはわかりませんが、偽のウイルスで友達を怖がらせるのが好きです. メモ帳でコマンドを作成しているときに一時停止できることがわかりました。例: (@echo OFF echo あなたはハッキングされています dir/s 一時停止。これは 1 つの dir/s を一時停止するので、ループに入っていないので特異です。これにより、1 秒間継続します (dir/s /s は単数形です。) さらに入力することで拡張できます. 例: (@echo OFF echo you are being hacked dir/s dir/s dir/s dir/s pause (これにより、少なくとも 5 秒間継続します)停止する数秒前 これが役に立ち、理解できることを願っています。

于 2013-04-26T02:45:51.453 に答える
0

あなたができる唯一のことは:

DIR c:\directory* /s/b | FIND "filename.txt" | more

この方法では、1 ページ以上の結果が見つかった場合に Enter キーを押す必要があります。ただし、停止dir /sするタイミングがわからないため、これは を停止しません。

編集: forループを停止する方法についてのコメントについては、以下を参照してください。

の代わりに、この例ではLocate32dir | findを使用します。それを見てください。すべてのファイルのリストをテキストファイルに保存するというschnaaderの提案に似ています。Locate32 はデータベースを作成し、スケジュールに基づいて自動的に更新することができます。データベースですばやく検索できます。

cmd.exe次の例では、 c:\windows の下のどこかを検索します。ファイル名全体を検索するため、appcmd.exe. のためgoto :skip、最初の結果が表示された後に停止します。

@echo off

FOR /f %%G IN ('"C:\Program Files\Locate\Locate.exe" -p c:\windows -lw cmd.exe') do (
  echo %%G
  goto :skip
)

:skip
echo done
于 2011-08-09T18:35:41.293 に答える