由于Windows文件夹属性的缓存机制,通过脚本修改desktop.ini文件后,desktop.ini中的属性并不会立马生效,普通F5刷新也不会起到任何作用,经过大量网络检索后,终于找到解决方法,并运用到本动作。
现公开我寻找到的解决方法,以便各位搞开发的朋友使用,需要强制刷新文件夹属性缓存的朋友,可以直接看这,免去下载动作慢慢研究浪费的时间。
常规方法:
Start-Process powershell -ArgumentList "-NoExit", "-Command", "(New-Object -ComObject Shell.Application).Namespace('要打开属性窗口的路径').Self.InvokeVerb('Properties')"
完美解决方法(来自于onlyclxy 大佬)
核心代码(VBS):
set shell = CreateObject("Shell.Application") set folder = shell.NameSpace("文件夹路径") folder.MoveHere "desktop.ini文件路径", 4+16+1024
其中,"文件夹路径"是你要刷新的目标文件夹的路径,"desktop.ini文件路径"是你要移动的desktop.ini文件的路径。
该代码能够强制刷新文件夹属性缓存,核心就是通过VBS脚本移动desktop.ini文件,将外部desktop.ini移入,或内部desktop.ini移出再移入,然后执行一次普通的刷新(F5),就能看到文件夹的图标成功被刷新。
你可以在外部(系统Temp文件夹)创建desktop.ini文件,再移入目标文件夹或目标文件夹的父级文件夹就行了。
个人这边建议移入父级文件夹的desktop.ini,因为这可以实现在目标文件夹不止一个,需要批量更新文件夹图标时,只通过该VBS代码执行一次命令,即可刷新父级文件夹中的所有文件夹。
但该方法也有一些小问题,在文件夹视图非详细信息视图时,可能会出现图标不刷新的情况,经过测试,该问题只需要在文件夹中创建任意文件即可。
也就是说,你可以通过执行以上VBS代码,来刷新详细信息视图的文件夹图标,并在目标文件列表中,创建任意文件,再删除该文件的方式(相比让Quicker循环创建VBS脚本,写入再运行会快很多),实现后台强制刷新文件夹属性缓存。