递归循环到子文件夹并在文件中查找子字符串

时间:2016-12-22 17:00:37

标签: windows batch-file for-loop substring

我想创建一个脚本,以递归方式循环遍历D:\MyFolder\的子文件夹,以查找名为MyFile.txt的多个文件 然后查看关键字FROM的每个文件,并检索FROM和下一个分号;之间的字符串。

MyFile.txt的示例:

LOAD
   Thing1,
   Thing2,
   Thing3,
FROM
   Somewhere ;

所需的结果是:Somewhere

(分号;的位置可以在另一行中。)

我做了一些尝试,但我没有成功写出正确的脚本:

@echo off
SET PATH="D:\MyFolder\"
FOR /R %PATH% %%f IN (MyFile.txt) DO (
    FOR /F "delims=FROM eol=;" %%A in (%%f) do (
    set str=%%A
    ECHO %str% 
    )
)

如果无法批量完成,请告诉我用哪种语言可以轻松完成。我想最终有一个可执行脚本。

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题:

  • delims的{​​{1}}选项定义字符,但不是字用作解析文本文件的分隔符。要查找单词,请改用for /F(您可以使用其findstr选项导出搜索字符串的位置/行号。)
  • /N eol选项定义了一个字符,如果它出现在开头,则忽略一行(或者它前面只有分隔符)。
  • for /F实际上不会搜索文件,以防集合中没有通配符(for /R?)(这是括号中的部分)。 *命令可以执行此操作,因此您可以围绕dir /S包裹for /F循环来解决此问题。
  • 系统使用dir /S变量来查找可执行文件,例如PATH,因此您不能覆盖它;改为使用不同的变量名称。

以下是我可能会这样做的方式(假设还需要返回关键字findstr后面的任何文字):

FROM