特定のファイルで文字列を検索しようとしています。このファイルの名前には空白が含まれている可能性があり、バッチファイルで問題が発生しています。
コンソールで正しい結果を取得することで、これを簡単に行うことができます。
findstr /m /C:tofind "C:/myPath/my file name with white spaces"
しかし、バッチファイルでそれを実行しようとすると、結果がまったく表示されません。
@echo off
for /r "delims:|" %%i in (*) do (
findstr /m /C:tofind "%%i"
)
私は何が間違っているのですか?
必要なのは次のとおりです。
findstr /m /c:toFind *
現在のディレクトリ内のすべてのファイルを検索し、検索文字列を含むファイルの名前を出力します。
現在のディレクトリ以外のフォルダを検索する場合は、次のようにします。
pushd "c:\yourPath"
findstr /m /c:toFind *
popd
各ファイルのフルパスを出力に含める場合は、次のようにします。
findstr /m /c:toFind "c:\yourPath\*"
FORループを使用して、当初の意図どおりにファイルを反復処理する適切な方法は次のとおりです。
for %%F in (*) do findstr /m /c:toFind "%%F"
ただし、FINDSTRが独自にファイルを反復できる場合は、FORを使用してファイルを反復する必要はありません。
FORコマンドは、バッチで使用できる最も複雑なコマンドです。まったく異なることをする多くの異なる形式があります。ここにいくつかあります:
for %%A in (file list with wildcard support) - iterate files
for /f "options" %%A in (filePath) - read and parse a file
for /f "options" %%A in ("string") - parse a string
for /f "options" %%A in ('someCommand') - parse the output of a command
ドキュメントを注意深く読む必要があります。タイプHELP FOR
またはFOR /?
コマンドプロンプトからドキュメントを取得します。
私は解決策を見つけました。
in
句を二重引用符で囲み、/F
for`の代わりに/R/ for the
を使用すると機能するようです。
@echo off
for /f %%i in ("*") do (
findstr /m /C:toFind "%%i"
)