Ветеран
Сообщения: 27449
Благодарности: 8088
|
Профиль
|
Отправить PM
| Цитировать
BOBAT, ясно. Понимаете, в чём дело… Скрипт у Вас находится в каталоге %SystemRoot%, пакетный файл, надо полагать, там же, рядом с ним (иначе Вы его таким кодом не запустите). Пакетный файл (из какой бы папки Вы не запускали скрипт) считает целевым каталогом тот, в котором находится сам (Set fldr=%~dp0), и всякий раз отрабатывает на том же каталоге %SystemRoot%.
Для начала давайте избавимся от пакетного файла вовсе. Назовём скрипт «Attach Icon to Folder.vbs» и поместим его в собственный каталог «Attach Icon to Folder» в «%ProgramFiles%»:
C:\Program Files\Attach Icon to Folder\Attach Icon to Folder.vbs
Код: 
Option Explicit
Const ReadOnly = 1
Const Hidden = 2
Const System = 4
Dim strSourceFolder
Dim objFSO
Dim objFile
Dim strDesktopIniFile
If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
strDesktopIniFile = objFSO.BuildPath(strSourceFolder, "desktop.ini")
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
If StrComp(objFSO.GetExtensionName(objFile.Name), "ico", vbTextCompare) = 0 Then
objFile.Attributes = objFile.Attributes Or Hidden
If objFSO.FileExists(strDesktopIniFile) Then
With objFSO.GetFile(strDesktopIniFile)
.Attributes = .Attributes And Not (System Or Hidden)
End With
End If
With objFSO.CreateTextFile(strDesktopIniFile, True)
.WriteLine "[.ShellClassInfo]"
.WriteLine "IconResource=" & objFile.Name & ",0"
If Left(objFSO.GetFileVersion("C:\Windows\System32\ntdll.dll"), 2) <> "6." Then
.WriteLine "IconFile=" & objFile.Name
.WriteLine "IconIndex=0"
End If
.Close
End With
With objFSO.GetFile(strDesktopIniFile)
.Attributes = .Attributes Or (System Or Hidden)
End With
With objFSO.GetFolder(strSourceFolder)
.Attributes = .Attributes Or ReadOnly
End With
Exit For
End If
Next
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
WScript.Quit 1
End If
WScript.Quit 0
Для внедрения в контекстное меню используем следующий файл реестра:
Код: 
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\Attach Icon to Folder]
@="Назначить значок папке"
"HasLUAShield"=""
[HKEY_CLASSES_ROOT\Directory\Background\shell\Attach Icon to Folder\command]
@=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,77,00,\
73,00,63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,22,00,20,00,22,\
00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,\
73,00,25,00,5c,00,41,00,74,00,74,00,61,00,63,00,68,00,20,00,49,00,63,00,6f,\
00,6e,00,20,00,74,00,6f,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,5c,00,\
41,00,74,00,74,00,61,00,63,00,68,00,20,00,49,00,63,00,6f,00,6e,00,20,00,74,\
00,6f,00,20,00,46,00,6f,00,6c,00,64,00,65,00,72,00,2e,00,76,00,62,00,73,00,\
22,00,20,00,22,00,25,00,56,00,22,00,00,00
здесь значение параметра по умолчанию раздела command — «"%SystemRoot%\System32\wscript.exe" "%ProgramFiles%\Attach Icon to Folder\Attach Icon to Folder.vbs" "%V"» с типом REG_EXPAND_SZ (вместо типичного REG_SZ).
Сохраните скрипт по указанному месту, импортируйте файл реестра в реестр, пользуйте.
P.S. Но идея реализации мне всё равно категорически не нравится. Я бы привязывался не к папке (HKEY_CLASSES_ROOT\Directory\Background), а к файлам *.ico — так будет и правильнее, и надёжнее, и позволит указать конкретный файл ico, если их будет несколько.
|