我是Windows批处理编程和Stack Overflow的新手,如果我问任何对您这些经验丰富、有才华的人来说显而易见的问题,请原谅。我正在使用Windows批处理(.bat)通过findstr
查找包含特定字符串的文件。然而,我想跳过目录中的某些文件夹。
setlocal EnableDelayedExpansion
set basedir=C:\folder
for /f %%g in ('dir /a:-h /b %basedir% ^| findstr /v "Projects" ^| findstr /v "Archive"') do (
findstr /i /m /s /c:"request" %basedir%\%%g *.* > %basedir%\Projects\list.txt
)
当我查看findstr
输出的文件list.txt时,发现它搜索了我告诉它不要搜索的文件夹。也就是说,输出结果如下:
C:\folder\somefile.rtf
C:\folder\Requests\anotherfile.rtf
C:\folder\Projects\dontsearchme.txt
C:\folder\Archive\dontsearchmeeither.txt
C:\folder\Archive\Projects\dontsearchme.txt
如果它正常工作,只有
C:\folder\somefile.rtf
和C:\folder\Requests\anotherfile.rtf
将被包含在list.txt中。为了测试循环代码,我使用了以下内容:setlocal EnableDelayedExpansion
set basedir=C:\folder
for /f %%g in ('dir /a:-h /b %basedir% ^| findstr /v "Projects" ^| findstr /v "Archive"') do (
echo %basedir%\%%g
)
那段代码按预期工作,跳过了Projects和Archive文件夹。我猜问题与我的
findstr
调用方式有关,但我还没有找到错误。非常感谢任何见解!谢谢! -Alex
Findstr
中移除,然后添加到DIR
中,看看是否可以解决问题。 - Matt Williamson