我有一个文件夹,里面有很多种文本文件。构造文件名,以便在文件名中有一个主体和一个日期,例如:
AAA_20150630.txt
AAA_20150629.txt
BBB_20150630.txt
CCC_20150630.txt
CCC_20150701.txt
现在我想计算每种类型文件的文件数量,这样在这种情况下,所需的结果将是:
AAA 2
BBB 1
CCC 2
我还有另一个文本文件filelist.txt
,列出了所有可能的类型,即
AAA
BBB
CCC
我正在尝试构建一个循环遍历filelist.txt
行的CMD脚本,并计算文件夹中每种类型文件的出现次数。
到目前为止,我一直在关注this问题中的建议,成功构建一个脚本来计算单个文件出现次数(%source_dir%是我之前设置的文件夹) :
set count=0
for /f %%k in ('dir /b /a-d %source_dir%\AAA_* ^| find /c /v ""') do set count=%%k
echo number of AAA files = %count%
然而,当我尝试围绕这个构建另一个for循环时遇到问题,以便遍历文件列表中列出的所有类型的文件:
for /f %%i in (%filelist%) do (
set count=0
for /f %%j in ('dir /b /a-d %source_dir%\%%i_* ^| find /c /v ""') do set count=%%j
echo number of %%i files = %count%
)
此代码不起作用:它遍历所有行,但它只计算%filelist%中第一项的实际数字,然后返回所有连续的结果。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:0)
您需要使用!
进行延迟扩展才能在循环和ifs中使用变量:
@echo off
setlocal EnableDelayedExpansion
for /f %%i in (%filelist%) do (
set count=0
for /f %%j in ('dir /b /a-d !source_dir!\%%i_* ^| find /c /v ""') do set count=%%j
echo number of %%i files = !count!
)
pause
答案 1 :(得分:0)
这里有一个更简单的选择。
@echo off
setlocal
set "sourcedir=path\to\some\folder"
for /f %%I in (filelist.txt) do (
for %%A in (%sourcedir%\%%I*) do set /a count[%%I] += 1
)
set count
它也应该更有效率。