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

Hum*_*ead 3 windows explorer icons batch-file

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

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

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

手动重命名它们并从批处理文件重命名它们之间的区别是什么?如何让Explorer使用新的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        
)
Run Code Online (Sandbox Code Playgroud)

wOx*_*xOm 5

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

@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
Run Code Online (Sandbox Code Playgroud)

PS我忘记了大部分的VB,所以谁记得它可能会重写VBS(嵌入式)中的整个代码.