batch-file - 批量计算所有文件,但排除特定文件夹中的文件

标签 batch-file

因此,我将计算目录中的文件数(包括所有子文件夹),并获取在目录中找到的文件数量的输出。问题是我想排除所有名为 error 的文件夹。我不想计算该文件夹中的那些文件。

简单地...

for /r "\\server\share\folderA" %%G in (*.*) do (
set /A count=count + 1
)    
echo %count%

在文件夹A下有很多我正在计算的子文件夹,但也有我不想计算的“错误”文件夹。

所以我正在尝试以下操作...

创建一个名为 exclude.txt 的临时文件,并在该文件中输入 error

if not exist "c:\temp" mkdir "c:\temp" 2>nul
if not exist c:\temp\exclude mkdir c:\temp\exclude 2>nul
echo error> %excludefolder%\exclude.txt

现在我想以某种方式将其结合起来。基本上做这样的事情......

for /r "\\server\share\folderA" %%G in (*.*) EXCLUDE: c:\temp\exclude\exclude.txt do (
set /A count=count + 1
)    

但我知道这行不通,而且我不知道如何解决。有人知道吗?谢谢!

最佳答案

使用DIR/S/B/A-D 迭代所有文件。输出包括每个文件的完整路径。

将结果通过管道传送到 FINDSTR/L/I/V "\\error\\ 以过滤掉包含 \error\ 的路径。这还将排除任何文件夹在 error 文件夹中。可以修改搜索以仅排除“error”,但包括“error”的子级。

将该结果通过管道传输到 FIND/C/V "" 以计算文件(行)数。

dir /s /b /a-d | findstr /liv "\\error\\" | find /c /v ""

上面将简单地显示计数。

如果要捕获变量中的计数,请使用 FOR/F 解析上述命令的输出。在 FOR/F 中使用时,必须转义未加引号的有毒字符,例如 |

@echo off
for /f %%N in ('dir /s /b /a-d^|findstr /liv "\\error\\"^|find /c /v ""') do set count=%%N
echo count=%count%

关于batch-file - 批量计算所有文件,但排除特定文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504311/

相关文章:

python - 使用 Python 从批处理文件中获取退出代码

windows - Windows 中的文件重定向和 %errorlevel%

batch-file - 为什么我的计划任务正确更新了它的 'Last Run Time',并给出了 'Last Run Result' 的 '(0x0)',但仍然没有真正工作?

batch-file - "CD/D C:\"什么也没做

batch-file - 从文本文件中读取 - 批处理

r - 在 Rscript.exe 中执行表达式

batch-file - 如何在 DOS 中从文本文件的最后 2 行提取信息

windows - 如何删除批处理文件中的文件列表

windows - cmdkey 删除名称上带有破折号和空格的凭据 "-"

windows - 批处理文件 - 如何检查是否设置了 bin 文件夹的路径