批量计算所有文件,但不包括特定文件夹中的文件

时间:2016-02-19 11:33:31

标签: batch-file

所以我要计算包含所有子文件夹的目录中的文件,并获得一个输出,作为它在目录中找到的文件数量。问题是我想要排除名称为error的所有文件夹。那个文件夹中的那些文件我不想被计算在内。

只需...

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

在folderA下,我正在计算大量的子文件夹,还有我不想计算的“错误”文件夹。

所以我正在尝试以下内容......

创建一个名为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
)    

但是我知道这不起作用,我不知道如何解决这个问题。有人知道吗?谢谢!

2 个答案:

答案 0 :(得分:3)

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

将结果传递给FINDSTR /L /I /V "\\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%

答案 1 :(得分:2)

您可以从count中排除包含字符串“error”的文件夹:

@echo off
set count=0

for /r "\\server\share\folderA" %%a in (*.*) do (
  echo %%~pa | find /i "error" || set /A count+=1
)    
echo %count%

如果您确定只有 ONE 错误文件夹,这是一种好方法。如果你有另一个包含字符串“error”的文件夹,那么它也将被排除在计数之外。