我想编写一个批处理文件,用于记录包含特定模式的所有文件和文件夹,以及排除文件夹,但没有成功:
@ECHO OFF
for /r "%c:\" %%x in (david) do (
echo "%%x"
findstr /f:exclude.txt /c:"%%x" > nul || echo.%%x >> c:\david.log
)
goto :eof
C:\ $ RECYCLE.BIN \ C:\ TEMP \
帮助?
答案 0 :(得分:2)
(排除/g:
; /f:
是一个非常不同的东西 - 请参阅for /?
)
for /r %%i in (*david*) do echo %%i|findstr /v /i /g:exclude.txt >>c:\david.log
答案 1 :(得分:2)
好的,Stephan打败了我几分钟。但我认为我的版本更好,因为
findstr
一次,而不是每个找到的文件或文件夹名称更快。文件C:\Temp\Exclude.txt
包含要忽略的文件夹列表。重要的是要在文件中转义$
,否则它将被解释为不是文字。
C:\Temp\Exclude.txt
的示例:
C:\\$Recycle.bin
C:\Temp
批处理文件包含或多或少的一行:
@echo off
dir /A /B /S C:\*david* | %SystemRoot%\System32\findstr.exe /B /I /V /G:"C:\Temp\Exclude.txt" >C:\Temp\david.log
因为可以通过在命令提示符窗口中运行dir /?
来读取它,所以参数/A
会导致包含任何属性的文件和文件夹,其中包括隐藏的系统文件和文件夹。选项/B
表示裸格式,/S
用于搜索和列出所有子目录中匹配的文件和文件夹。
findstr /?
输出此命令的帮助。 /B
表示开头。 /I
表示忽略大小写进行搜索。 /V
是最重要的选项,因为它意味着输出所有不包含搜索字符串的行。带有搜索字符串的文件使用/G
指定。
结果会重定向到文件C:\Temp\david.log