Batch file 无需重新启动即可更改和刷新文件夹图片的批处理脚本

Batch file 无需重新启动即可更改和刷新文件夹图片的批处理脚本,batch-file,cmd,windows-8.1,Batch File,Cmd,Windows 8.1,我编写了一个批处理脚本来仔细阅读文件夹中的所有png文件,并在有同名文件夹时将它们指定为文件夹图片 在将信息写入desktop.ini文件时,该脚本可以完美地工作。只有一个小问题:它不起作用。我无法让文件夹读取修改后的desktop.ini文件并更新其图片 我正在使用Windows8.1。我怀疑我需要删除某种缓存,但我不知道具体是哪种缓存以及如何删除。据我所知,更改文件夹图标时,需要杀死explorer.exe,删除iconcache文件并重新启动explorer.exe 我不知道iconcac

我编写了一个批处理脚本来仔细阅读文件夹中的所有png文件,并在有同名文件夹时将它们指定为文件夹图片

在将信息写入
desktop.ini
文件时,该脚本可以完美地工作。只有一个小问题:它不起作用。我无法让文件夹读取修改后的
desktop.ini
文件并更新其图片

我正在使用Windows8.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

您需要通知所有资源管理器窗口从新修改的
ini
文件更新。这可以通过Cscript获得


您必须对此进行测试并回复我,因为我无法在我发布的设备上进行测试。

可能重复@LotPings。不幸的是,该问题的公认答案没有提供详细的解决方案,内容指向一个具有不同版本Windows的折旧功能的页面,这在Windows 8及更高版本中不起作用。不幸的是,它不起作用。考虑到这是我第一次使用它,我将阅读一些关于这个API的文章,看看我是否能理解它。观察结果:
Shell.NameSpace
应该指向
%%~dpI%%~nI
,所以我在尝试中改变了这一点。在您的示例中,它指向“Cat”文件夹(自然着色器)。不,我们正在写入temp,然后复制回path。所以不要改变路径。明天我会带着笔记本电脑回家做一个测试。首先,谢谢!是的,它正在复制回父文件夹路径,而不是我正在更改的子文件夹。因此,我不确定如果不在子文件夹中,它会如何影响子文件夹,并且它会在最终目标中不断覆盖自己。示例:假设我有
自然着色器/Stone 1.png
自然着色器/Stone 2.png
;另外还有文件夹
Nature Shaders/Stone 1/
Nature Shaders/Stone 2/
,我正在将其中的图片更改为父文件夹中相同命名的png文件
desktop.ini
将被写入
Nature Shaders/
两次,而不是写入各自的子文件夹。注意:要使其正常工作,您还需要删除^escaping&或包装设置变量或cd目标的引号。好的,请立即尝试。我不知道您想影响与
png
同名的文件夹。。这让我很困惑。对于集合变量的换行双引号。。它们必须存在,不要删除它们,因为它们有助于消除可能不需要的空白。我没有注意到你有转义插入符号,所以我把它去掉了。这里的主要变化是
shell.NameSpace^(“%%~dpnI”^)
我刚刚为name添加了
n
,因此它将完成文件夹路径
Nature Shaders\Stone 1
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