Windows批处理脚本:在文件夹和子文件夹中搜索字符串

时间:2015-10-23 06:14:33

标签: batch-file

我试图搜索字符串" @ B-ADD | 496 |"在我的主文件夹及其子文件夹中。但是,以下脚本无法搜索我的子文件夹。 请帮助

FOR /F "tokens=*" %%A IN ('findstr /S "@B-ADD|496|" C:\Users\william\Desktop\New Folder\*.txt') DO (
  move "C:\Users\wee-liem.wong\Desktop\New Folder\*.txt"   "C:\Users\william\Desktop\New Folder (2)"
)

pause

1 个答案:

答案 0 :(得分:1)

<强> findstr

您的路径包含空格。您正在move命令中正确引用它们,但未在findstr命令中引用它们。如果没有引号,则找不到搜索的路径,因此找不到文件。

如果要处理包含字符串的文件列表,则需要向findstr表明您不希望找到找到的文本,只需要找到找到文本的文件名。在/M

中使用的切换列表中加入findstr

此外,根据字符串的内容,findstr将不会像您期望的那样表现。某些字符会使搜索字符串作为正则表达式处理或在空格中分割。最好指出搜索内容。

因此,findstr应该看起来像

findstr /s /m /l /c:"@B-ADD|496|" "C:\Users\william\Desktop\New Folder\*.txt"

在子目录(/s)中搜索仅返回文件名(/m)文字(/l但在这种情况下可以省略,因为/c默认表示字符串literal)指示的字符串(/c:"....."

<强> for /f

更正findstr命令后,您将检索将由for /f迭代的匹配文件列表。如果要仅移动 这些找到的文件,则在move命令的源中包含完整路径和通配符是没有意义的。您应该使用源"%%~fA"来检索for可替换参数(代码中为%%A)引用的元素的完整路径,即找到文件的完整路径。

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "source=C:\Users\wee-liem.wong\Desktop\NewFolder"
    set "target=C:\Users\william\Desktop\NewFolder(2)"

    if not exist "%target%\" md "%target%\"

    for /f "delims=" %%A in ('
        findstr /s /m /l /c:"@B-ADD|496|" "%source%\*.txt"
    ') do move /y "%%~fA" "%target%"