我一直觉得,整理照片这件事,最烦的还真不是拍照,而是拍完之后面对那一堆“DSC_0001”“IMG_2023”开头的文件名。尤其是做活动跟拍、给孩子记录成长、或者经营电商店铺需要整理商品图的时候,几百上千张照片堆在文件夹里,老板或者客户一句“把照片清单给我一份”,你就得老老实实把每个文件名敲进Excel里。手敲是不可能的,这辈子都不可能的,复制粘贴又怕漏、怕错。这个问题其实早就有了,而且几乎所有接触图片文件的人都会遇到,但真正好用的解法一直散落在各种论坛的角落里,很少有人系统讲清楚。
这篇文章就专门来解决“批量提取照片名字到表格中”这件事。我整理了5个我用过、实测靠谱的工具和方法,从Windows系统自带的命令、Excel自带功能,到批处理脚本、Python脚本,再到Mac上的终端操作,全部覆盖。不管你是完全没接触过代码的新手,还是已经会一点脚本的进阶玩家,都能找到适合自己那一款。每个方法我都把操作步骤拆到最细,连命令行里哪个空格该有、哪个符号要加引号都会交代清楚。更重要的是,我会告诉你每个方案背后的逻辑,让你以后遇到类似的问题能举一反三,而不是只会照着步骤抄。
1. 整体思路拆解:批量提取照片文件名,本质上是什么问题
先说个可能很多人没意识到的点:批量提取文件名到表格,底层就是“列目录”这件事。任何操作系统,本质上都是一个文件管理器,它天生就记录了每个文件夹下有哪些文件,文件名、扩展名、大小、修改日期这些信息早就存在系统里,我们要做的不是去“生成”这些信息,而是把它们“导出来”。搞懂这一点,你就不会觉得这是什么高深的技术,无非是找对了工具,让系统把已经有的信息吐出来而已。
基于这个逻辑,市面上的所有方案其实只分两大类。第一类是让系统自带的命令行工具干这件事,优点是完全免费、不需要安装任何东西、速度快,缺点是界面不友好,需要记忆少量命令。第二类是借助图形化软件或者脚本语言,把命令行输出的结果进一步加工成我们想要的表格格式,优点是可视化、能清洗数据、能批量处理更多细节,缺点是需要安装软件或者运行环境。
我在决定推荐哪几个工具之前,先列了一下评判标准。第一,必须零门槛,不能一上来就让新手配环境、装依赖,那会劝退80%的人;第二,必须免费,为了提取一个文件名去下载付费软件,实在不值得;第三,必须可复现,你照着做一次,下次就能闭着眼睛操作;第四,最好能覆盖不同操作系统和不同使用场景。最终筛下来,留下了这5个:Windows命令提示符、Excel Power Query、批处理脚本、Python脚本、Mac终端命令。前两个适合绝大多数普通用户,第三个是前者的日常化包装,第四个是进阶玩家的高效方案,第五个是苹果用户的专用通道。
这里要特别强调一个容易踩坑的认知:很多人以为这些方法的效果都一样,其实差别很大。普通的命令行只给你一个文本文件,文件名一行行排着,你需要自己复制到Excel里。而Excel Power Query能做到“自动监控整个文件夹”,哪怕你之后往文件夹里新增了照片,刷新一下表格就能更新清单。Python脚本则能直接输出带文件大小、路径、拍摄日期甚至照片分辨率的完整Excel表格。所以,选哪个方案,取决于你要的是“能用”还是“好用”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 工具一:Windows命令提示符,系统自带的免费劳力
2.1 三分钟上手:dir命令的正确打开方式
很多人看到“命令提示符”这五个字就头疼,觉得这是程序员才用的玩意儿。其实你只需要学会一个单词——dir,它是 directory(目录)的缩写,作用就是把当前文件夹里的所有内容列出来。我们在命令提示符里敲命令,本质上就是让电脑别用鼠标点,直接以文字对话的形式告诉它“你想干什么”。
第一步,打开命令提示符。Windows 10和Windows 11都是按键盘上的 Win + R 组合键,这时候屏幕左下角会弹出一个“运行”对话框,英文名叫Run,输入三个字母 cmd,然后按回车。你会看到一个黑底白字的窗口,这就是传说中的命令行界面。第一次看到它别慌,它就是个简陋点的聊天窗口,你打字,按回车,电脑执行,仅此而已。
第二步,进入你存放照片的文件夹。假设你的照片都在 D盘 的“旅行照片”文件夹里,那就输入:
cmd复制cd /d D:\旅行照片
这里的 cd 是 change directory(切换目录)的缩写,/d 参数是让系统允许你切换盘符,从C盘切到D盘必须加这个参数。输完按回车,你会看到命令提示符前面多了一个 D:\旅行照片>,意思就是“我已经到位了,你要我干嘛”。
第三步,就是见证奇迹的时刻。输入:
cmd复制dir /b > 文件名列表.txt
然后打开你的照片文件夹,会看到里面多了一个叫“文件名列表.txt”的文件。双击打开它,是不是所有的文件名都已经在里面了,一个不多一个不少?这里的 /b 是 bare(裸)的缩写,意思是“不要给我显示其他乱七八糟的信息,只要文件名”,而 > 符号的作用是把原本显示在屏幕上的结果“重定向”到一个文件里,通俗讲就是“把这句话记到小本本上”。这个思路很重要,以后你想把任何命令的运行结果存下来,都是这么操作。
2.2 从txt到Excel:三秒钟完成数据搬家
txt文件虽然已经拿到了所有名字,但毕竟不是表格。你可能会说“我复制粘贴到Excel里不就行了”,对,但这只适用于照片少的情况。当你有几百个文件名的时候,全选、复制、打开Excel、粘贴,虽然也能用,可是如果你后面需要根据文件名去匹配其他数据,这种纯手工方式就显得杂乱。
这里给大家提供一个更规整的做法:在Excel里直接打开这个txt文件。操作路径是:打开Excel,点击“数据”选项卡,选择“从文本/CSV”,然后找到刚才生成的“文件名列表.txt”。Excel会弹出一个预览窗口,你什么都不用改,直接点“加载”,所有文件名就会自动变成一列整齐的表格数据。这比复制粘贴要快得多,而且以后如果文件夹里的照片更新了,你只要重新运行一遍dir命令,再在Excel里点一下刷新,清单就同步更新了。
如果你想在命令提示符里直接筛选特定类型的照片,比如只提取jpg格式的,命令稍微改一下:
cmd复制dir /b *.jpg > 照片清单.txt
这里的 * 是通配符,意思是“任意长度的一串字符”,.jpg 就说“所有以.jpg结尾的文件”。同理,你想提取png格式,把后面的后缀改成.png就行。start cmd /k dir /b,你会看到一个黑色窗口一闪而过。这个方法我用了很多年,简单到不能再简单。关键要记住,是把“命令提示符”这个程序发送到文件夹里,它的本质就是“在某个位置打开一个命令行窗口”,这其实是一个超级好用的技巧。不仅如此,你还可以把这个bat文件拖到快捷方式栏,以后想用随时点。
用批处理的逻辑并不复杂,本质上就是把你刚才在命令提示符里敲的那几个命令,全部写到一个文本文件里,然后让电脑自动帮你执行。新手可能觉得“我直接打开命令提示符敲不是一样吗?”,区别在于:第一,批处理文件可以重复使用,下次你只需要把新的照片文件夹路径改一下,双击就能出结果;第二,你可以把它发给同事、朋友,别人不用学命令,双击就完事。
如果你觉得每次改路径还是麻烦,这里再提供一个进阶玩法。把下面这段代码存成“把照片名字弄到表格.bat”:
bat复制@echo off
dir /b /s *.jpg *.png *.jpeg > 照片清单.txt
echo 搞定了,按任意键退出
pause > nul
这里的 /s 参数是“包含所有子文件夹”的意思。什么意思呢?比如你的照片文件夹里有“2024年1月”“2024年2月”等子文件夹,没有 /s 的话只能提取根目录下的文件,加了 /s 就会把子文件夹里的照片一股脑全部提出来,而且路径也会一起带上。这个功能在整机整理资料的时候格外好用,因为它能从一堆多层嵌套的文件夹里把所有相关文件一把抓出来。注意,你用的是Python,用Python处理文件相关的任务,核心就是调一个叫 os 的标准库,它有几个专门处理文件路径和文件列表的函数。我写了一段可以直接复制粘贴运行的代码,注释都写清楚每一行在干什么。
脚本代码:
python复制import os
# 1. 指定你的照片文件夹路径
folder_path = r"D:\旅行照片"
# 2. 遍历指定文件夹下的所有文件
all_files = os.listdir(folder_path)
# 3. 你想要提取哪些格式的照片,就把扩展名加在下面的列表里
ext_set = {".jpg", ".jpeg", ".png", ".bmp", ".heic"}
# 4. 筛选出符合格式的文件,并把完整路径拼出来
photo_names = []
for f in all_files:
ext = os.path.splitext(f)[1].lower() # 取出扩展名并转为小写
if ext in ext_set:
photo_names.append(f)
# 5. 把结果写入一个txt文件
with open(r"D:\旅行照片\照片清单.txt", "w", encoding="utf-8") as fp:
for name in photo_names:
fp.write(name + "\n")
print(f"共提取到 {len(photo_names)} 个文件名,已写入照片清单.txt")
这个脚本的逻辑非常直观:第1步定义文件夹路径,第3步设置想提取哪些格式的照片,第4步遍历文件夹里的每个文件,检查它的扩展名在不在我们的预设集合里,如果在就收进列表。最后一步把列表逐行写入txt文件。你只要把第2行路径换成你自己的文件夹路径,然后双击运行,就能在同一个文件夹下看到生成的清单。相比命令行,这套方案的好处是逻辑清晰、容易扩展,想加格式、想加子文件夹遍历,改几行代码就行。
如果你还想一步到位直接生成Excel文件,代码也不复杂,换成用 pandas 库输出:
python复制import os
import pandas as pd
folder_path = r"D:\旅行照片"
ext_set = {".jpg", ".jpeg", ".png", ".bmp", ".heic"}
rows = []
for root, dirs, files in os.walk(folder_path):
for f in files:
if os.path.splitext(f)[1].lower() in ext_set:
full_path = os.path.join(root, f)
size = os.path.getsize(full_path)
mtime = os.path.getmtime(full_path)
rows.append([f, full_path, size, mtime])
df = pd.DataFrame(rows, columns=["文件名", "完整路径", "大小", "修改时间"])
df.to_excel(r"D:\旅行照片\照片清单.xlsx", index=False)
print("已生成带路径和大小信息的Excel清单")
看到这段代码,你可能会觉得“这什么鬼,看不懂”。很正常,pandas 是第三方数据分析库,需要单独安装。如果你完全不会Python,建议先别碰这段,把它当作你日后进阶的方向。如果你已经有Python基础,这段代码能让你提取的信息量比纯命令行丰富得多,还能顺带算清楚每张照片占多大空间,方便你清理磁盘。我觉得这才是这类工具适合的人:日常经常和图片打交道、又不想一次次手动做重复操作的半专业人士。
5. 工具五:Mac电脑用户,终端一行命令同样搞定
如果你用的是MacBook,Windows那套cmd和bat方法是派不上用场的,但好消息是Mac自带的“终端”工具同样可以几秒钟完成任务,而且语法更简洁。很多人不知道Mac上怎么打开终端,其实和Windows打开命令提示符的逻辑一样:同时按 Command + 空格,弹出的聚焦搜索框里输入“终端”,回车就能打开。
进入界面后,第一步依然是进入照片文件夹。Mac上的路径斜杠和Windows相反,是正斜杠 /。假设你的照片放在“文稿”目录下的“旅行照片”文件夹里,输入:
bash复制cd ~/文稿/旅行照片
注意,这里的 ~ 符号代表当前用户的主目录,也就是”用户/你的用户名”那一层。cd的意思是同样的,切换目录。
第二步,用 ls 命令列出文件名。ls 是 list 的缩写,相当于Windows下的dir。直接输入:
bash复制ls > 文件名列表.txt
这条命令的意思是把当前文件夹下的所有文件名输出到“文件名列表.txt”文件里。打开Finder,你就能在同一个文件夹下看到这个文件。如果你希望把所有子文件夹里的照片也一并找出来,用 -R 参数:
bash复制ls -R > 文件名列表.txt
这里 -R 是 recursive(递归)的缩写,用来遍历所有子文件夹。Mac用户如果比较熟练,还能加很多其他参数,比如按大小排序 ls -S、按时间排序 ls -lt,但作为新手,先把 ls 和 > 这两个概念用熟就够了,其他的等你需要时再查。
Mac生成的txt文件,同样可以用Excel或者Mac自带的Numbers打开。打开Excel,按 Command + O 选择这个文件,就会进入导入向导,按默认选项点击下一步,Excel就能把文件名整理成一行一列的表格。
如果你希望列表里显示的是照片的完整路径,而不是只有文件名,Mac可以用下面的命令:
bash复制find "$PWD" -name "*.jpg" > 照片路径清单.txt
这里的 $PWD 意思是“当前所在目录的完整路径”,find 是查找命令,-name 指定按文件名匹配。相比之下,纯 ls 命令只显示文件本身,不会显示路径,如果你需要拿着清单去别的机器上找对应文件,路径信息就至关重要。
6. 特殊场景与高手技巧:排序、乱码、只提取特定条件
6.1 让清单按拍摄时间或修改时间排序
很多时候,我们需要提取的文件名是杂乱的,比如手机导出的照片经常是 IMG_0001、IMG_0002,但实际拍摄顺序和文件顺序不一定对得上。这时候,如果能按拍摄时间或修改时间排序,清单就会更有价值。在Windows命令行里,使用 dir /b /od 就能让输出结果按修改日期升序排列,其中 /o 是order(排序)的意思,d 表示按日期排序。举例:
cmd复制dir /b /od > 按日期排序的照片清单.txt
在Mac终端里,对应的命令是 ls -t,其中 -t 是按时间排序。如果你需要按时间倒序,也就是最新拍摄的排在前面,用 ls -tr。这两个参数虽然不起眼,但在活动跟拍整理交付清单时非常实用,客户往往希望清单按时间线看下来,方便对照哪个环节拍了多少张。
6.2 文件名乱码、cs 文件名称列当你用命令行时,因为不同系统默认编码不同,生成的txt文件在使用Excel打开时可能出现中文乱码。解决办法很简单:用Windows自带Excel“数据”选项卡里的“从文本/CSV”导入功能,并在文件来源处选择“UTF-8”或“Unicode”编码。如果你已经用txt打开了,看到乱码,别急着删,只要按第2节讲的方法重新用Excel导入一次,选择正确的编码格式,数据就能恢复正常。这个坑我帮不少同事踩过,真是典型的“看起来严重、实际上三秒解决”的问题。
6.3 只提取某个日期范围拍摄的照片
这是另一个高频需求。比如你只整理2024年暑假出游的照片,但文件夹里还混着去年、前年拍的一堆旧照片。用命令行做日期筛选不太方便,但在Python脚本里就是加一行条件判断的事。通过os.path.getmtime 拿到修改时间后,转成日期格式,再用一个 if 判断把它限定在特定区间内:
python复制import datetime
...
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(full_path))
if datetime.date(2024, 7, 1) <= mtime.date() <= datetime.date(2024, 8, 31):
rows.append([f, full_path, size, mtime])
这是纯命令做不到的事,也是为什么我建议大家往脚本方向进阶的原因。当你的需求从“提取文件名”变成“筛选出特定条件下符合条件的文件名”,脚本的能力就开始碾压普通命令行了。
6.4 防止手滑:提取前先备份文件夹结构
有一件事我每次都会提醒自己,做文件操作前先想清楚会不会误操作。批量提取文件名本身是个只读操作,不会改动照片,但如果有人告诉我“我文件夹里照片太多,我直接按照清单删掉了文件”,那大概率会因为路径不对或者名称有特殊字符而误删。所以,建议提取后的清单作为“档案”,而不是“操作指令”。如果你确实需要移动或删除照片,更安全的方式是先在Excel里处理清单,把需要保留的文件名筛选出来,再按清单逐一操作。毕竟,电脑文件的删除是不可逆的,多一步备份,多一分安全。
6.5 扩展:提取照片后,顺带批量重命名
标题里说的是“提取照片名字”,但很多人在整理照片时其实是倒过来的需求:先把文件名改成有意义的格式,再生成清单。这里分享一个我常用的组合操作。先用dir命令或Python生成原始清单,然后在Excel里手动修改一列,把文件名统一改成“日期_地点_序号.jpg”这类格式,接着使用Windows的 ren 命令配合循环,就能一次性把文件夹里的物理文件全部改名。也就是说,提取清单不一定是终点,它也可以是你批量整理照片的第一步。
7. 常见问题与避坑经验明细表
我把这几年实操中遇到的典型问题做了一个速查表,顺手把这些坑的处理方式也一并写进去,方便你遇到问题的时候直接查。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 生成的txt是乱码 | 编码格式不对 | 用Excel的“从文本/CSV”导入,选择UTF-8编码 |
| 双击bat文件后窗口一闪而过 | 忘了加pause命令 | 在bat文件最后加一行 pause |
| dir命令找不到路径 | 路径中包含空格或中文 | 用cd /d时给路径加上英文引号,比如cd /d "D:\旅行照片" |
| 提取出来的文件名顺序很乱 | 默认按文件名首字母排 | 用dir /b /od 按修改时间排序,或用Python自排序 |
| Mac上ls命令导出的txt中文乱码 | 编码兼容问题 | 打开时选择UTF-8,或使用Excel导入向导 |
| 文件夹里有子文件夹,但没提取到 | 命令没加递归参数 | Windows用dir /b /s,Mac用ls -R |
| 照片格式是RAW、HEIC之类 | 默认命令没包含该扩展名 | 用Python脚本自定义扩展名集合,或命令行中写 .nef、.heic |
| 生成的清单中路径不对 | 只显示了文件名而非完整路径 | Windows用 dir /b /s 或Python生成full_path;Mac用find "$PWD" |
| 文件里包含一些隐藏文件或系统文件 | 没有做扩展名过滤 | 命令行加后缀过滤,或脚本里限定扩展名列表 |
| Excel打开txt后全挤在一列 | 没有使用导入向导而是直接打开 | 调出“数据→从文本/CSV”的分列功能 |
这张表我建议你截图保存一下,基本覆盖了新手在操作过程中九成会遇到的情况。排障思路也很简单:先判断是命令问题还是编码问题,再看是路径问题还是数据本身问题,一层层剥开,大多数问题几分钟就能定位。
8. 绕不开的话题:选工具之前,先想清楚你要拿这份清单做什么
很多人一上来就问“哪个工具最好”,但我的回答永远是“看你的使用场景”。如果只是偶尔一次、整理了完事,Windows用户在命令提示符里敲一条dir命令就够了,整个过程不超过10秒钟;如果是定期整理素材库、每个月都要出一份目录,那就要学Power Query或者批处理脚本,让电脑自动干活;如果清单本身还要做大量后期的数据加工,比如筛选、排序、合并路径信息、按照特定规则重命名,那Python脚本就是最合适的。可以说,前两个工具是“一次性解决”,后两个工具是“一劳永逸”。
我还想强调一个很多教程从不提及的点:这份清单文件本身也是一种元数据资产。当你照片的数量从几百涨到几万,完全靠图片查看器一张张找需要的照片已经是灾难。而通过上面的方法,你能轻松给照片建立索引库。每拍一批新照片,重新生成一次清单,按时间、地点、主题命名好文件,放在专门一个“照片库索引”文件夹里。以后想找一张“去年冬天在公园拍的夕阳”,搜索清单文件里“冬天”“公园”“夕阳”等关键词,几秒钟就能定位到具体文件名和路径。这才是“提取照片名字”这个动作背后最高级的用法。
我个人在实际操作中,Windows系统下最常使用的是第一个dir命令和Excel导入的组合,因为实在快;而遇到需要深度筛选和匹配多个文件夹的照片素材时,我一定是打开Python写一段脚本,一气呵成把清单做成Excel报表直接发给对方。每种方法都有它的生态位,就像工具箱里不只有一把锤子一样,掌握得越多,面对不同任务就越从容。希望这篇内容对你有用,下次再遇到“把照片清单整理出来”这个需求,不再是一个令人头疼的任务,而是你顺手就能解决的小事。
