Пакетный скрипт для изменения и обновления изображений папок без перезагрузки - PullRequest
1 голос
/ 21 апреля 2019

Я написал пакетный скрипт для просмотра всех файлов png в папке и назначения их в качестве изображений папок, когда есть папки с одинаковым именем.

Скрипт работает безупречно, когда дело доходит до записи информации в desktop.ini файлы. Есть только небольшая проблема: это не работает. Я не могу заставить папки читать измененные desktop.ini файлы и обновлять их изображения.

Я использую Windows 8.1. Я подозреваю, что мне нужно удалить какой-то кэш, но я не знаю, что и как именно. Из того, что я прочитал, при смене значков папок вам нужно убить explorer.exe, удалить файлы iconcache и перезапустить explorer.exe.

Я понятия не имею, хранят ли файлы iconcache также изображения папок, но в любом случае убийство проводника ужасно для моего рабочего процесса. Я бы хотел, чтобы процесс не требовал уничтожения заданий, если это возможно.

Ниже приведен скрипт, который я использую:

set DriveL=E
set F=desktop.ini
set CatRoot=Media\Textures ^& 3D
set Cat=Nature Shaders
cd "%DriveL%:\%CatRoot%"
for /R %%I  ("%Cat%\*.png") do @(
    if exist %%~dpI%%~nI\ (
        attrib -h -s -r "%~dp0%%~nI\%F%" 2>nul (
            echo [ViewState]
            echo Mode=
            echo Vid=
            echo FolderType=Pictures
            echo Logo=%%~dpI%%~nxI
        ) > "%~dp0%%~nI\%F%"
        attrib +s +h +r "%~dp0%%~nI\%F%"
    )
)
pause

1 Ответ

1 голос
/ 21 апреля 2019

Вы должны указать всем окнам проводника обновляться из только что измененного файла ini. Это доступно через Cscript API

set "DriveL=E:"
set "CatRoot=Media\Textures & 3D"
set "Cat=Nature Shaders"
cd /d "%DriveL%\%CatRoot%"
for /R %%I in ("%Cat%\*.png") do (
     attrib -h -s -r "%temp%\desktop.ini" >nul
         (echo [ViewState]
          echo Mode=
          echo Vid=
          echo FolderType=Pictures
          echo Logo=%%~fI
          ) > "%temp%\desktop.ini"
            attrib +s +h +r "%temp%\desktop.ini"

     (echo set shell = CreateObject^("Shell.Application"^)
      echo set folder = shell.NameSpace^("%%~dpnI"^)
      echo folder.MoveHere "%temp%\desktop.ini", 4+16+1024
     )>"%temp%\folUpd.vbs"
     cscript //nologo //b "%temp%\folUpd.vbs"
  )
)
pause

Вы должны проверить это и получить ответ, но я не могу проверить это на устройстве, с которого я отправил сообщение.

...