谢谢,正愁替换的文件夹图标应该如何替换呢,原来 desktop.ini 路径还可以这么写 icons\

随便聊聊 · 80 次浏览
白纸遗言 创建于 15天16小时前

我用bat写的一个脚本,还碰到一个 刷新不出来的问题,重启文件资源管理的话又闪屏,请教怎样才能做到不闪屏刷新出来?我desktop.ini文件里还写了 备注 标记 的内容,难道就是因为 desktop.ini 文件的 "删除→重建"可以强制清除缓存, 直接替换里面的内容保存刷新不出来的概率较大?


独木不成林同学 15天12小时前 :
这个问题前期也遇到过,确实让人很头疼,win系统机制仅读取缓存不会实时读取desktop.ini文件的,只有进行删除或移动“上级文件夹的desktop.ini”才会刷新缓存,重启文件资源管理虽然稳定,但效率太低且闪屏。我之前也通过vbs写desktop.ini和刷新图标,测试了很多次发现并不稳定且容易报错,最后还是采用quicker模块(C#)既稳定又高效。
无论哪种方式实现,总体思路:
  path1=目标文件夹路径
  path2=目标文件夹路径的上一级文件夹
  设置图标:写desktop.ini(path1目录下)➡️设置属性:隐藏+系统文件(注:如果不设置属性,系统看不见)
  刷新图标:读取并删desktop.ini(path2目录下)➡️写回已读取内容desktop.ini(path2目录下)➡️设置属性:隐藏+系统文件(注:1.先删再写才能真正刷新缓存;2.先读取再写回为了不影响path2的图标显示)

以下是之前版本的vbs测试,提供思路一起学习:https://temp.getquicker.net/281467/a85496c7322145d4ac1c9bbce8cbcbb1.html
回复内容
白纸遗言 13天18小时前
#1
好烦,复制你说的方法,让ai去写试了很多次都不行,是不是他理解错了,可不可以直接发刷新这块的代码
独木不成林同学 回复 白纸遗言 12天12小时前 :

$$' 忽略报错
On Error Resume Next 
' 定义文件夹路径
Dim folderPath
folderPath = "{所在文件夹路径}"

' 定义 desktop.ini 文件路径
Dim desktopIniPath
desktopIniPath = folderPath & "\desktop.ini"

' 检查 desktop.ini 文件是否存在
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim desktopContent

If fso.FileExists(desktopIniPath) Then
    ' 读取 desktop.ini 文件内容
    Dim file
    Set file = fso.OpenTextFile(desktopIniPath, 1)
    desktopContent = file.ReadAll
    file.Close
Else
    ' 创建新的 desktop.ini 文件内容
    desktopContent = "[.ShellClassInfo]" & vbCrLf & _
                     "ConfirmFileOp=0" & vbCrLf & _
                     "NoSharing=1" & vbCrLf & _
                     "IconFile=folder.ico" & vbCrLf & _
                     "IconIndex=0" & vbCrLf & _
                     "InfoTip=本文件来自【更换图标】@独木不成林同学" & vbCrLf
End If

' 创建临时文件路径
Dim tempPath
tempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
Dim tempIniFile
tempIniFile = tempPath & "\desktop.ini"

' 将内容写入临时 desktop.ini 文件
Dim tempIni
Set tempIni = fso.CreateTextFile(tempIniFile, True)
tempIni.Write desktopContent
tempIni.Close

' 循环检查tempIniFile+等待50ms,3秒超时退出
WScript.Sleep 20
Dim waitStartTime: waitStartTime = Timer
Do Until fso.FileExists(tempIniFile)
    If (Timer - waitStartTime) * 1000 >= 3000 Then WScript.Quit 1
    WScript.Sleep 20
Loop

' 使用 Shell.Application 移动文件
Dim folder
Set folder = CreateObject("Shell.Application").NameSpace(folderPath)
If Not folder Is Nothing Then
    folder.MoveHere tempIniFile, 4 + 16 + 1024 ' 4+16+1024 = 不显示确认对话框 + 覆盖现有文件 + 不显示进度
End If

' 设置文件和文件夹属性
Dim shell
Set shell = CreateObject("WScript.Shell")
shell.Run "attrib +h +s " & desktopIniPath, 0, True

' 等待,确保文件操作后再刷新
WScript.Sleep 100

' 模拟按下 F5 键,刷新资源管理器
shell.SendKeys "{F5}"

' 停止忽略报错
On Error GoTo 0
' 释放对象
Set fso = Nothing
Set shell = Nothing
WScript.Quit(0)

独木不成林同学 回复 白纸遗言 12天12小时前 :

在现有动作中的“设置文件夹图标”子程序,"$= {模式} == "刷新图标""语句就是用quicker模块的完整刷新图标逻辑,{所在文件夹路径}变量为上一级文件夹路径。可以根据这个逻辑让AI写,但是在读取和写入desktop文件时,需要注意“文件编码”(默认是gb2312),即:fso.OpenTextFile(..., 1)  ' 读取;fso.CreateTextFile(..., True)  ' 写入。

回复主贴