Скрипт для пакетного редактирования desktop.ini для нескольких папок

Я ищу, чтобы создать пакетный файл сценария Windows, чтобы определить расположение значка папки, в папках desktop.ini

В основном, у меня более 400 видео на моем медиа-диске. У каждого есть файл значка с тем же именем, что и папка, например:

E: \ Movies \ Movie (2010) -> Имя папки E:\Movies\Movie (2010).ico -> Имя файла значка

Сначала я щелкал правой кнопкой мыши по каждой папке и настраивал значок, однако недавно я сменил ПК и подключил жесткий диск к новому компьютеру, и все значки папок стали стандартными. Если есть возможное решение, я был бы очень благодарен.

PS последний раз, когда я занимался кодированием, была эпоха пакетных файлов MS-DOS:)

1 ответ

Поместите это в файл vbs и запустите в cmd с аргументом, являющимся папкой, в которой находятся папки

EditDesktopIni(Wscript.Arguments(0))

Sub EditDesktopIni(foldpath)
Dim fso, inifile, icondata, file, fold, subfold, item
Const ForReading = 1, ForWriting = 2
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Set fso = CreateObject("Scripting.FileSystemObject")
Set fold = fso.GetFolder(foldpath)
Set subfold = fold.SubFolders
For Each item In subfold
    If (fso.FileExists(foldpath + "\" + item.Name + "\desktop.ini")) Then 'If desktop.ini exists, delete it
        fso.DeleteFile foldpath + "\" + item.Name + "\desktop.ini", True
    End If
    Set file = fso.OpenTextFile(foldpath + "\" + item.Name + "\desktop.ini", ForWriting, True, TristateUseDefault)

    file.WriteLine "[.ShellClassInfo]"
    file.WriteLine "IconResource=" & foldpath & "\" & item.name & ".ico" & ",0"
    file.WriteLine "[ViewState]"
    file.WriteLine "Mode="
    file.WriteLine "Vid="
    file.WriteLine "FolderType=Generic"
    file.WriteLine ""

    fso.GetFile(foldpath + "\" + item.Name + "\desktop.ini").Attributes = 6
Next
End Sub

Заметки:

  1. Я получил текст в файле desktop.ini из тестовой папки в Windows 7 com. Я не уверен, будет ли это работать на других версиях Windows.
  2. Я протестировал код, но значки обновляются только через некоторое время, а некоторые обновляются

РЕДАКТИРОВАТЬ: Это работает мгновенно (и код гораздо приятнее):

EditDesktopIni(Wscript.Arguments(0))

Sub EditDesktopIni(foldpath)
    Dim fso, inifile, icondata, file, fold, subfold, item, subfoldpath
    Const ForReading = 1, ForWriting = 2
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fold = fso.GetFolder(foldpath)
    Set subfold = fold.SubFolders
    For Each item In subfold
        inifile = foldpath + "\" + item.Name + "\desktop.ini"
        subfoldpath = foldpath & "\" & item.name
        If (fso.FileExists(inifile)) Then 'If desktop.ini exists, delete it
            fso.DeleteFile inifile, True
        End If
        Set file = fso.OpenTextFile(inifile, ForWriting, True, TristateUseDefault)

        file.WriteLine "[.ShellClassInfo]"
        file.WriteLine "IconResource=" & subfoldpath & ".ico" & ",0"
        file.WriteLine "[ViewState]"
        file.WriteLine "Mode="
        file.WriteLine "Vid="
        file.WriteLine "FolderType=Generic"
        file.WriteLine ""

        fso.GetFile(inifile).Attributes = 6
        item.Attributes = 0
        item.Attributes = 4 'Set the folder to system to refresh the icon
    Next
End Sub
Другие вопросы по тегам