使用 Batch findstr 查找带有空格的文件

使用 Batch findstr 查找带有空格的文件

我正在尝试在给定文件中搜索字符串。此文件的名称中可能包含空格,而我在使用批处理文件时遇到了问题。

我可以通过控制台轻松做到这一点并获得正确的结果:

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"
)

我究竟做错了什么?

答案1

您只需要以下内容:

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 FORFOR /?以获取文档。

答案2

我找到了解决方案。

它似乎可以在子句中使用双引号in,并使用for`/F代替/R/ for the

@echo off
for /f  %%i in ("*") do  (
    findstr /m /C:toFind "%%i"
)

相关内容