【技术交流】快速提取某一文件夹下所有文件名称
在需要获取文件名的文件夹中,新建一个txt格式的记事本文件。在记事本文件中输入:
DIR *.* /B >C:\Users\Administrator\Desktop\LIST.TXT
将此记事本文件后辍名,由txt改为bat。会弹出重命名对话框,单击“是”。
右键“新建文本文档.bat”,以管理员身份运行,即可在电脑桌面生成list.txt文件。打开txt文件即可看到当前文件夹内的所有文件名列表。
本文的提取文件夹内文件名的方法,思路就是将文件保存到要提取文件名的目录下,保存为*.bat(*为文件名),然后以管理员身份运行就OK了。
1. 关于快速提取某一文件夹下所有文件名称,大家有什么经验可以分享?
2. 快速提取某一文件夹下所有文件名称需要注意哪些关键点?
3. 有没有相关的规范或案例可以参考? 这个思路没问题,DIR /B 确实是最快的批处理方式。不过实际用下来,有几个地方建议改一下,不然换台电脑、换账户或者目录带空格就容易翻车。
关于输出路径
原帖里写的是 C:\Users\Administrator\Desktop\LIST.TXT,这个路径只适合当前用户是 Administrator 的机器。如果是普通账户,或者用户名不是 Administrator,批处理运行后可能直接报错,或者文件没生成到桌面。
建议改成两种写法:
■ 输出到当前文件夹:DIR /B > LIST.TXT
● 优点:不依赖桌面路径,运行完就在原目录里找
● 缺点:如果原目录权限不够,可能写不进去
■ 输出到当前用户桌面:DIR /B > "%USERPROFILE%\Desktop\LIST.TXT"
● 优点:换账户也能用
● 注意:路径里带空格时,引号不能省
如果批处理文件是放在目标文件夹里的,更稳一点可以写成:
@echo off
set "OUT=%USERPROFILE%\Desktop\LIST.TXT"
dir /b "%~dp0" > "%OUT%"
echo 已生成:%OUT%
pause
这里 %~dp0 表示批处理所在目录,这样不管从哪里双击运行,都只提取批处理所在文件夹的文件名。
关于是否包含子目录
DIR /B 默认只列当前目录下的文件,不包含子文件夹。
■ 如果只要当前文件夹文件名:DIR /B
■ 如果要包含所有子文件夹,并且带完整路径:DIR /S /B
■ 如果要包含所有子文件夹,但只想要文件名、不要路径:bat里写起来麻烦,建议用PowerShell
工程资料归档时,很多时候需要按目录结构核对,所以 DIR /S /B 反而更实用,能看出文件在哪个子目录里。
关于中文乱码
如果文件名是中文,导出来的LIST.TXT用某些软件打开可能乱码。常见原因是cmd默认编码和查看软件编码不一致。
■ 用记事本打开一般问题不大
■ 如果Excel打开乱码,可以先在bat开头加 chcp 65001 >nul,再用UTF-8方式查看
■ 更推荐用PowerShell导出,编码控制更清楚
更省事的PowerShell写法
如果电脑是Win10/Win11,其实不用写bat,在目标文件夹地址栏输入 powershell 回车,然后执行:
Get-ChildItem -File | Select-Object -ExpandProperty Name | Out-File -FilePath "env:USERPROFILE\Desktop\LIST.txt" -Encoding UTF8
只导当前文件夹文件名。
如果要包含子目录,并且导出成CSV,方便Excel筛选:
Get-ChildItem -Recurse -File | Select-Object Name, FullName, Length, LastWriteTime | Export-Csv -NoTypeInformation -FilePath "env:USERPROFILE\Desktop\LIST.csv" -Encoding UTF8
这个比纯txt好用不少,文件名、路径、大小、修改时间都有,工程资料清点时比较方便。
几个小提醒
■ 一般不需要“以管理员身份运行”,除非目标文件夹在受保护目录里,比如某些系统目录或权限受限的工程盘
■ 如果目标路径或文件名有空格,批处理里路径最好加引号
■ 如果文件数量很大,建议先试一个小目录,确认输出格式没问题再跑全量
■ 如果是要做竣工资料或归档清单,建议保留完整路径和修改时间,别只导文件名,后面核对会麻烦
总结一句:临时用,改一下输出路径的bat就够了;长期做资料归档,建议用PowerShell导出CSV,更稳也更清楚。
页:
[1]