所以我要计算包含所有子文件夹的目录中的文件,并获得一个输出,作为它在目录中找到的文件数量。问题是我想要排除名称为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
)
但是我知道这不起作用,我不知道如何解决这个问题。有人知道吗?谢谢!
答案 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”的文件夹,那么它也将被排除在计数之外。