2015-10-23 70 views
3

我正在使用此批處理腳本將所有文件夾和子文件夾的圖標更改爲位於文件夾中的.ico文件。更改desktop.ini不會在Windows中自動更新文件夾圖標

但是該文件夾圖標不會在資源管理器改變,除非我手動重命名文件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   
) 
+0

不應該是'attrib + r + s -a'%%〜dpI。「/S/D' – Squashman

+1

Windows發送一個刷新,批次不是 – Marged

+0

註銷並重新啓動後,應該顯示新的圖標(只是爲了確保批量工作)... – aschipfl

回答

0

我不是強行殺死的Explorer.exe的忠實粉絲,但我認爲這將在基於我在其他一些網站看到了一個批處理文件工作。

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

使用shell功能,將通知所有正在運行的資源管理器窗口使用更新desktop.ini。此API在VBScript中通過Shell.Application.NameSpace("folder\").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 

P.S.我忘了VB的大部分,所以無論誰記得它可能會重寫VBS中的整個代碼(嵌入式)。

+0

謝謝你這個作品完美無缺:) – HumansAreDead

相關問題