更改desktop.ini不会在Windows中自动更新文件夹图标

时间:2015-10-23 18:45:34

标签: windows batch-file icons explorer

我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的.ico文件。

但是,资源管理器中的文件夹图标不会更改,除非我手动将资源管理器中的desktop.ini文件重命名为其他内容,然后返回desktop.ini或将字母更改为大写例。

我甚至编写了一个批处理函数来自动重命名desktop.ini,但它不起作用。

手动重命名它们并从批处理文件重命名它们之间的区别是什么?如何让资源管理器使用新的desktop.ini

@echo off

for /r %%I in (*.ico) do (
    attrib -r -s "%%~dpI." /S /D 

    if exist %%~dpIdesktop.ini (
        del "%%~dpIdesktop.ini"
    ) 
    >>%%~dpIdesktop.ini echo [.ShellClassInfo]
    >>%%~dpIdesktop.ini echo IconResource="%%~nI%%~xI",0

    attrib -h desktop.ini /S
    attrib +r -s "%%~dpI." /S /D        
)

2 个答案:

答案 0 :(得分:5)

使用shell函数将通知所有正在运行的资源管理器窗口,以使用更新的desktop.ini。此API通过Shell.Application.NameSpace("folder\").MoveHere

在VBScript中公开
@echo off
for /r %%I in (*.ico) do (
    attrib -h -s -r "%temp%\desktop.ini" >nul
    (
        echo [.ShellClassInfo]
        echo IconResource="%%~nxI",0
    )>"%temp%\desktop.ini"
    attrib +h +s "%temp%\desktop.ini"
    (
        echo set shell = CreateObject^("Shell.Application"^)
        echo set folder = shell.NameSpace^("%%~dpI"^)
        echo folder.MoveHere "%temp%\desktop.ini", 4+16+1024
    )>"%temp%\updateIcon.vbs"
    cscript //nologo //b "%temp%\updateIcon.vbs"
)
pause

P.S。我忘记了大部分的VB,所以无论谁记得它都可以用VBS(嵌入式)重写整个代码。

答案 1 :(得分:0)

我不是强力杀死Explorer.exe的忠实粉丝,但我认为这将基于我在其他一些网站上看到的批处理文件。

taskkill /fi "imagename eq explorer.exe" /f
CD /d %userprofile%\AppData\Local
DEL IconCache.db /a
START explorer.exe