最近,在和网友交流时,对方推荐了一个视频,我打开一看,是一个手工获取当前目录下所有文件名的手机视频。用的方法是在win11中复制所有文件的路径,然后粘贴到Excel当中,通过查找替换和分列的方法,清除冗余部分,最后得到文件名。
这种方法很巧妙,没有借助于编程或者不太常见的软件就获取了文件名。我随后也探索了一些简便的方法和大家一起来分享。
先说一下要求:获取当前文件夹下的所有png文件,不包括扩展名。
一、复制路径法——简单方便
使用快捷键ctrl+a来全先当前文件,然后选择资源管理器上方的【复制路径】,得到所有文件的路径。
获取文件路径
接着,把这些路径放到Excel文件当中,通过【查找替换】获取所有文件名,这是可以把不是png的文件删除,然后再把A列按照【.】分列,这样就得到了所有图片的文件名。
查找替换
这种方法简单、实用,没有什么技术含量,小白也能轻松上手。如果当前目录下多种类型文件混杂,那么还要一行一行删除不符合要求的路径。解决的办法是把文件按照类型排列,然后再选中获取路径。
二、Dos命令法
Dos命令是windows不断更新却从未放弃的内置功能,想当前我学计算机可是从dos开始学起,它的命令有时非常强大,比在windows下操作简单多了。
为了获取当前目录下的文件名,我们可以在当前目录上方输入【cmd】,进入dos界面。
在当前目录下进入dos
然后,输入命令:
dir *.png /b > filename.csv
把文件名写入csv文件
这样,我们就把扩展名为png的所有文件的文件名写入到了filename.csv文件当中。我们可以用Excel打开这个csv文件,再进行分列就可以了。
dos命令写入当前目录下的文件名
这种方法明显减少了操作步骤,不仅对文件名进行了筛选,也不用再复制和粘贴了,几乎是一步到位把文件名写入到了Excel文件当中。当然,这种方法虽然简便,但是无法提取子目录中的文件名。
三、批处理命令法
批处理命令比一般的dos命令更强大,因为它可以便历子目录,甚至还可以批量创建文件,比如上面的写入文件名到csv文件中的dos命令还可以改写为以下批处理命令:
for %F in (*.png) do @echo %F>>file.csv
以上命令的功能是列出当前目录下所有 .png 文件的文件名(扩展名),并将结果追加到 filename.csv文件中。
如果不想带扩展名,也可以用以下代码一键实现:
for %F in (*.png) do @echo %~nF>>file.csv
在上面的二条命令中, for 循环来遍历当前目录下所有的 .png 文件。
for %F in (*.png):这是 for 命令的语法,它会遍历当前目录下所有文件名匹配 *.png 的文件。 %F 是循环变量,它代表当前正在处理的文件名。
do @echo %~nF>>file.txt:do 关键字指示在每次迭代时要执行的命令。@echo %~nF 用于打印当前文件名的文件名部分(不带扩展名)。
%~nF 是获取 %F 的文件名部分的语法。
>>file.txt 表示将输出追加到 file.txt 文件末尾,而不是覆盖原有内容。
四、Python命令法
如果电脑上安装的有python,还可以使用Python编程的方法,导入os或者pathlib模块,通过遍历列表中的每一个元素,把它们追加到Excel表中,然后再保存即可轻松实现指定文件名。
#导入模块
import os
from openpyxl import Workbook
# 创建一个工作簿对象
wb = Workbook()
# 激活第一个工作表
ws = wb.active
# 你的列表数据
data = [file for file in os.listdir() if file.endswith(".png")]
# 如果不要扩展名,则可以这样写:
# data = [os.path.splitext(file)[0],for file in os.listdir() if file.endswith(".png")]
# 将数据逐行写入工作表
for row in data:
ws.append([row])
# 保存工作簿
wb.save('output.xlsx')
五、VBA 方法
如果经常需要获取当前目录下的所有文件名,就可以用下面的VBA代码:
Sub GetFileNames()
Dim FileSystem As Object
Dim Folder As Object
Dim File As Object
Dim i As Integer
' 清空Sheet1中的数据
Sheets("Sheet1").Cells.Clear
' 创建FileSystem对象
Set FileSystem = CreateObject("Scripting.FileSystemObject")
' 获取当前目录路径
Set Folder = FileSystem.GetFolder(ThisWorkbook.Path)
' 在Sheet1中显示文件名
i = 1
For Each File In Folder.Files
Sheets("Sheet1").Cells(i, 1).Value = File.Name
i = i + 1
Next File
End Sub
我们可以将上面的代码复制并粘贴到 Excel 的 VBA 编辑器中(按下 Alt + F11 打开),然后在工程资源管理器中的 Microsoft Excel Objects 中找到 ThisWorkbook,双击打开,将代码粘贴到打开的代码窗口中。然后关闭 VBA 编辑器,保存文件。
每当你运行 GetFileNames这个宏时,它将在 Sheet1 中列出当前目录下的所有文件名。如下图所示:
这种方法是一步到位,轻松获取了所有的文件名。不过要注意,VBA运行时会清空Sheet1中的数据,所以保证当前工作表是sheet1,然后没有其它重要数据。
六、学后反思
- 同一功能我们可以采用多种方法来实现,从手工复制粘贴到后来的dos命令或者编程,我都可以轻松实现达到最后的目标。大家可以根据自己喜好来进行取舍。
- 第一种方法简单好记,建议小白学习。第二种和第三种方法涉及dos命令,需要大家记忆一下。第三种和第四种分别保存在py和xls文件中,基本上是开箱即用。