【win10 文件夹数量和看到不一致查看隐藏文件已经打开,Thumb文件作妖】

目录

任务介绍:

批量把多个文件夹的图片重名命名为对应表格的L列数据;

重命名规则

修改前

修改后

实现思路

遍历工作表

填充字典:字典记录 键值对信息: key-旧名称 value-新名称 (分别对应每个表个A列和L列)

遍历父文件夹下的子文件夹:

匹配工作表名和子文件夹名

检查文件数量匹配

处理文件名和重命名

  1. 设置变量和文件夹路径:

    • 在代码中首先声明了各种变量,如文件夹路径、工作簿、工作表、行数、旧文件名、新文件名等。
    • folderPath 变量赋值为包含要处理文件的文件夹路径。
  2. 创建文件系统对象:

    • 使用 CreateObject("Scripting.FileSystemObject") 创建了文件系统对象 (fso),用于操作文件和文件夹。
  3. 遍历工作簿中的每个工作表:

    • For Each ws In wb.Worksheets 循环遍历工作簿中的每个工作表。
  4. 填充字典:

    • 对于当前工作表,通过 For 循环,提取指定列的数据,并存储到一个字典 dictSheet 中。其中,键是文件名,值是对应的新文件名。
  5. 遍历父文件夹下的子文件夹:

    • For Each subFolder In folder.SubFolders 遍历父文件夹下的所有子文件夹。
  6. 匹配工作表名和子文件夹名:

    • If subFolder.Name = ws.Name Then 确保子文件夹的名称与当前工作表名匹配。
  7. 检查文件数量匹配:

    • 检查当前子文件夹内的文件数量是否与当前工作表中特定数据行数量匹配。
  8. 处理文件名和重命名:

    • 遍历当前子文件夹下的所有文件,对每个文件的文件名进行处理。
    • 检查文件名是否存在于字典中,如果存在则重命名文件,将文件名更改为字典中对应的值。
  9. 重命名文件:

    • 使用文件系统对象的 Name 方法来重命名文件,将旧文件名改为新文件名。
  10. 输出信息或调试消息:

    • 使用 Debug.Print 输出信息,比如某个工作表文件数量不匹配的情况。

这段代码的主要逻辑是根据工作表中的数据,匹配文件名并进行重命名。通过循环遍历每个工作表以及文件夹中的文件,它自动将文件名更改为给定的值。

VB代码实现

vba 复制代码
Sub RenameImages()
    Dim folderPath As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim cureetSheetlastRow As Long
    Dim i As Long
    Dim oldName As String, newName As String
    Dim dictSheet As Object
    Dim keyCell As Range, valueCell As Range
    Dim fso As Object
    Dim folder As Object
    Dim subFolder As Object
    Dim file As Object
    Dim fileCount As Integer
    Dim key As Variant
    Dim value As Variant
    
    ' 设置文件夹路径
    folderPath = "C:\Users\Administrator\Desktop\Plasma 变色标签" ' 修改为您的父文件夹路径
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set wb = ThisWorkbook
    
    For Each ws In wb.Worksheets
        cureetSheetlastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        
        Set dictSheet = CreateObject("Scripting.Dictionary")
        
        ' 填充字典
        For i = 5 To cureetSheetlastRow
            Set keyCell = ws.Cells(i, "A")
            Set valueCell = ws.Cells(i, "L")
            dictSheet(Trim(keyCell.value)) = Trim(valueCell.value)
        Next i
        
        
        'For Each key In dictSheet.Keys
            'Debug.Print "Key: " & key & ", Value: " & dictSheet(key)
        'Next key
        
        ' 遍历父文件夹下所有子文件夹
        Set folder = fso.GetFolder(folderPath)
        For Each subFolder In folder.SubFolders
            ' 判断子文件夹名称是否为当前工作表名称
            'If subFolder.Name = "3.28" Then
                ''Debug.Print subFolder.Files.Count
                'For Each file In subFolder.Files
                    'Debug.Print file.Path
                
                'Next file
            'End If
            
            If subFolder.Name = ws.Name Then
                ' 获取子文件夹内文件数量
                fileCount = subFolder.Files.Count - 1
                '判断子文件文件数量是否等于currentSheetLast-4
                If fileCount = (cureetSheetlastRow - 4) Then
                    ' 遍历当前子文件夹下所有文件
                    For Each file In subFolder.Files
                        oldName = file.Path
                        Dim fileName As String
                        fileName = fso.GetBaseName(file.Path) ' 获取文件名
                        
                        'Debug.Print "正在处理文件: " & fileName
                        
                        'If dictSheet.Exists("1") Then
                        'MsgBox "存在1"
                        'Else
                        'MsgBox "不存在1"
                        'End If
                        
                        ' 检查文件名是否在字典中,并重命名文件
                        If dictSheet.Exists(fileName) Then
                            
                            newName = dictSheet(fileName) & ".png"  ' 新的文件名为对应字典值
                            ' 使用文件系统对象的 Name 方法来重命名文件
                            fso.GetFile(oldName).Name = dictSheet(fileName) & ".png"
                        End If
                    Next file
                Else
                    Debug.Print ws.Name & " 文件数量:" & fileCount & " " & "表格数量" & cureetSheetlastRow - 4
                End If
            End If
        Next subFolder
    Next ws
End Sub

BUG犯罪现场(眼见不一定为实)

代码中的防呆设计:

子文件夹的文件数量要和Excel对应表格A列序号数量一致。

打印文件夹数量每次都比Excel的序号数量多一个或者二个!!!特别奇怪!!!!

破案1:抓顶风作案的反贼!!!

图片为中图标查看的时候我没发现这个刺客!!!

查看设置为列表!! 发现了不一样!!!

破案2:破隐身抓刺客!!!

你以为查看设置了显示隐藏文件夹就稳了???

不行滴,年轻人!!!

判断文件图片数量和表格A列序号的数量(A5到最后一行),总是文件的数量总是显示多一个,全部打印出来发现是Thumb.db ,就算在查看中设置把文件隐藏打开还是看不到这个文件,但是打印文件夹文件名称会打印!!!

杀器:新建文件夹全部打印文件名对比文件名区别

新建一个文件夹复制3.28文件夹所有图片到新文件夹test,打印两个文件夹目录下的文件名,全部复制到Excel中对比,发现原文件夹多了Thumbs.db!!!

Thumb.db是什么?

Thumbs.db 是Windows操作系统下的一个系统隐藏文件,用于存储缩略图和预览图像的缓存信息。这个文件通常会在文件夹中出现,当操作系统需要显示文件夹中的缩略图或预览图时,会自动生成这个Thumbs.db文件来加快图像显示的速度。

下面是关于Thumbs.db文件的一些特点和信息:

  1. 缓存信息Thumbs.db文件会存储与文件夹中的图片文件相关的缩略图信息,这些缩略图可以帮助操作系统快速显示文件夹中的预览图像,而不必重新生成缩略图。

  2. 隐藏文件Thumbs.db文件通常是一个系统隐藏文件,在常规情况下,用户是看不到这个文件的,除非在Windows文件夹选项中选择显示隐藏文件和文件扩展名。

  3. 占用磁盘空间 :虽然Thumbs.db文件有助于加快图像预览的显示速度,但有时会被用户视为占用磁盘空间的不必要文件。

  4. 删除注意 :在某些情况下,用户可能选择手动删除Thumbs.db文件,但系统会在需要时重新生成这些文件。可以通过更改Windows文件夹选项来禁用系统生成Thumbs.db文件,但这可能会影响文件夹中的缩略图显示速度。

总的来说,Thumbs.db文件是Windows系统用来缓存文件夹中缩略图信息的隐藏文件,有助于提高文件夹图像显示的效率。

如何删除Thumbs.db 文件

1 当前目录下使用进入cmd 运行程序

shell 复制代码
 del /f /s /q /a thumbs.db 

2 遍历文件夹文件删除,所以在获取需要处理的文件实际数量时,可以先把文件名称打印出来查看是否存在Thumbs.db文件,存在则删除,删除后计数才比较准确

如何禁止Thumbs.db 文件

Win10系统禁止生成Thumbs.db缩略图缓存的方法

https://www.cnblogs.com/Music/p/hide-win10-thumbs-dot-db.html

相关推荐
叶北辰CHINA20 分钟前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡
不惑_37 分钟前
在 Ubuntu 安装 Python3.7(没有弯路)
linux·运维·ubuntu
团儿.42 分钟前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
学习溢出43 分钟前
深入了解 net user 命令:上一次是谁登录的?
windows·网络安全·系统安全
程序猿小D1 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa
bin91531 小时前
【EXCEL数据处理】000017 案例 Match和Index函数。
excel
权^2 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql
玉树临风江流儿2 小时前
Linux驱动开发(速记版)--设备模型
linux·驱动开发
杰哥在此2 小时前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
Code成立2 小时前
1、深入理解Redis线程模型
数据库·redis·bootstrap