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

但这目前甚至没有向 result.txt 写入任何内容,即使我确信我正在搜索的字符串出现在多个 .txt 文件中。我知道它一定是语法方面的,但我似乎无法弄清楚。

4

2 回答 2

3

您的脚本中有一些错误:

  1. 命令的等号后不应有空格set。具体来说,删除set /p "var1=.

  2. 要扩展变量,您必须在变量名称之前和之后放置一个百分号,所以不要%var使用%var%.

  3. 与您的问题没有直接关系,但您为什么要调用find两次?

我还使用了一个临时文件,因此result.txt不会被find.

请注意,如果您从文件运行批处理脚本,则在使用循环变量时需要使用双百分号,例如:%%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 回答