3

findコマンドを使用して親ディレクトリとすべてのサブディレクトリで文字列を検索し、その出力をテキストファイルに出力し、完了したらテキストファイルを開くバッチファイルを作成したいと思います。これまでの私のコードは次のようになります。

@echo off
set /p "var1= Enter the String to Find: "
for /F "delims=" %a in ('dir /B /S *.txt') do @(find /i "%var1" "%a" 1>nul 2>&1 && find /i "%var1" "%a") >> result.txt
start result.txt

しかし、文字列を検索している場所が複数の.txtファイルに表示されていると確信しているにもかかわらず、これは現在result.txtに何も書き込んでいません。私はそれが構文的に何かでなければならないことを知っていますが、私はそれを理解できないようです。

4

2 に答える 2

3

スクリプトにいくつかの間違いがあります。

  1. setコマンドの等号の後にスペースを入れてはいけません。具体的には、 の後のスペースを削除しますset /p "var1=

  2. 変数を展開するには、変数名の前後にパーセント記号を付ける必要がある%varため、代わりに%var%.

  3. 問題とは直接関係ありませんが、なぜfind2 回呼び出しているのですか?

一時ファイルも使用したためresult.txtfind.

ファイルからバッチ スクリプトを実行している場合は、ループ変数を使用するときに二重のパーセント記号を使用する必要があることに注意してください。次に例を示します。%%a

とにかく、これが修正されたスクリプトです。うまくいけば、意図したとおりに実行できます。

@echo off
set RESULT_FILE="result.txt"
set /p "var1=Enter the String to Find: "

pushd %~p0
type NUL > %RESULT_FILE%.tmp
for /f "delims=" %%a in ('dir /B /S *.txt') do (
    for /f "tokens=3 delims=:" %%c in ('find /i /c "%var1%" "%%a"') do (
        for /f "tokens=*" %%f in ('find /i "%var1%" "%%a"') do if %%c neq 0 echo %%f
    )
) >> "%RESULT_FILE%".tmp
move %RESULT_FILE%.tmp %RESULT_FILE% >nul 2>&1

:: Open the file
"%RESULT_FILE%"
popd
于 2012-11-12T22:05:47.593 に答える
0

ただfindstr abc *

対照的に、 findstr /v は abc なしですべてを出力します

于 2015-08-14T08:28:47.310 に答える