如何统计目录中特定格式用户名开头的文件数量?优先Excel方案
解决方案
Excel 实现步骤
1. 获取文件列表到Excel
- 打开CMD,进入目标目录,执行命令:
dir /b > filelist.txt - 打开Excel,导入
filelist.txt文件(数据选项卡 → 自文本/CSV),将文件名导入到A列。
2. 提取用户名
方法1(Excel 365/2021 支持正则)
在B1单元格输入公式:=REGEXEXTRACT(A1,"^[A-Za-z_]+")
下拉填充到所有行,即可提取每个文件名开头的用户名(字母+下划线组成的部分)。
方法2(旧版Excel 无正则支持)
在B1单元格输入数组公式(输入后按Ctrl+Shift+Enter确认):=LEFT(A1,MIN(IF(ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1),ROW(INDIRECT("1:"&LEN(A1)))))-1)
下拉填充到所有行。
3. 统计用户名对应文件数
方法1:数据透视表
- 选中B列(用户名列),点击「插入」选项卡 → 数据透视表。
- 在数据透视表字段中,将「用户名」拖到「行」区域,再拖一次到「值」区域(默认会自动统计计数)。
方法2:COUNTIF 公式+去重
- 在C1单元格输入:
=COUNTIF(B:B,B1),下拉填充。 - 选中B、C列,点击「数据」选项卡 → 删除重复值(仅保留B列的唯一用户名,对应C列的计数)。
其他替代方案
PowerShell(Windows 自带,无需额外安装)
打开PowerShell,进入目标目录,执行以下命令:
Get-ChildItem | Where-Object { $_.Name -match '^([A-Za-z_]+)\d{2,3}[a-z]\.' } | Group-Object -Property { $matches[1] } | Select-Object Name, Count
执行后会直接输出每个用户名及其对应的文件数量。
Batch 脚本(Windows CMD)
新建一个文本文件,将以下内容粘贴进去,保存为count_files.bat,放到目标目录双击运行:
@echo off setlocal enabledelayedexpansion for %%f in (*.*) do ( set "fname=%%~nf" set "uname=" for /l %%i in (1,1,255) do ( set "char=!fname:~%%i,1!" if "!char!" equ "" goto endloop if "!char!" geq "0" if "!char!" leq "9" goto endloop set "uname=!uname!!char!" ) :endloop if defined uname ( set /a count[!uname!]+=1 ) ) for /f "tokens=2,3 delims=[]=" %%a in ('set count[') do ( echo %%a %%b ) endlocal
Perl 脚本
新建文本文件,粘贴以下内容,保存为count.pl,放到目标目录,执行perl count.pl(需要Perl环境,若没有可直接用前面的PowerShell/Batch方案):
#!/usr/bin/perl use strict; use warnings; my %count; for my $file (<*.*>) { if ($file =~ /^([A-Za-z_]+)\d{2,3}[a-z]\./) { $count{$1}++; } } for my $user (sort keys %count) { printf "%-8s %d\n", $user, $count{$user}; }
内容的提问来源于stack exchange,提问作者Beanyurza
相关产品推荐
相关产品推荐

