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