我试图搜索字符串" @ 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
答案 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%"