Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Смена иконки папки. контекстное меню (реестр) + CMD

Ответить
Настройки темы
CMD/BAT - [решено] Смена иконки папки. контекстное меню (реестр) + CMD

Новый участник


Сообщения: 31
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: Wheee111
Дата: 21-07-2014
Описание: поправил меню с кодом, убрал пару пробелов.
Доброго времени суток, читателем этой темы. Спасибо что зашли посмотреть, надеюсь, сможете помочь советом.
Пытаюсь склепать следующую штуку: контекстное меню при нажатии ПКМ по папке, при нажатии на которое выполняется cmd скрипт со следующим кодом:
Код: Выделить весь код
 
cmd /k "cd /d %L     \\Попадаем в ту папку, по которой нажали пкм
&& echo 1 >> desktop.ini               \\Создаем или меняем скрытый файл desktop.ini, который содержит свойства папки типа значка и вида папки.
&& attrib -r -a -s -h desktop.ini         \\убираем все "лишние" атрибуты, чтобы удалить его, если он есть
&& del /f /q desktop.ini                      \\Удаляем этот файлик
&& echo [.ShellClassInfo] >> desktop.ini           
&& echo IconResource=ICOFolders\Black.ico,0 >> desktop.ini      \\пишем путь к иконке 
&& echo [ViewState] >> desktop.ini                \\какая-то порнуха, не знаю зачем оно, но оно есть внутри этого файла.
&& echo Mode= >> desktop.ini                          \\..
&& attrib +s +h desktop.ini                                 \\Возвращаем аттрибуты
&& exit"                                                            \\ exit
пару раз он отработал, потом по непонятной мне причине перестал функционировать, так как это было задумано. при том что содержимое нужного файла он меняет.
Идея всего этого безобразия следующая: возможность менять иконку папки через контекстное меню примерно таким образом:


Возможно есть смысл оформить вышенарисованный скрипт функцией, в которую будет передаваться только название иконки, ибо все остальное одно и тоже.

Код REG Файла под спойлером



Код: Выделить весь код
 

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\Test1]
@=""
"ExtendedSubCommandsKey"=""
"Icon"="ICOFolders\\Red.ico,0"
"Position"="Top"
"MUIVerb"="Сменить иконку"
"SubCommands"=""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell]

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Black]
@="Black"
"Icon"="ICOFolders\\Black.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Black\command]
@="cmd /k \"cd /d %L && echo 1 >> desktop.ini && attrib -r -a -s -h desktop.ini && del /f /q desktop.ini && echo [.ShellClassInfo] >> desktop.ini && echo IconResource=ICOFolders\\Black.ico,0 >> desktop.ini && echo [ViewState] >> desktop.ini && echo Mode= >> desktop.ini && attrib +s +h desktop.ini && exit\""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Red]
@="RED"
"Icon"="ICOFolders\\Red.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Red\command]
@="cmd /k \"cd /d %L && echo 1 >> desktop.ini && attrib -r -a -s -h desktop.ini && del /f /q desktop.ini && echo [.ShellClassInfo] >> desktop.ini && echo IconResource=ICOFolders\\Red.ico,0 >> desktop.ini && echo [ViewState] >> desktop.ini && echo Mode= >> desktop.ini && attrib +s +h desktop.ini && exit\""


[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Green]
@="Green"
"Icon"="ICOFolders\\Green.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Green\command]
@="cmd /k \"cd /d %L && echo 1 >> desktop.ini && attrib -r -a -s -h desktop.ini && del /f /q desktop.ini && echo [.ShellClassInfo] >> desktop.ini && echo IconResource=ICOFolders\\Green.ico,0 >> desktop.ini && echo [ViewState] >> desktop.ini && echo Mode= >> desktop.ini && attrib +s +h desktop.ini && exit\""


Собственно теперь сам вопрос: кто нибудь его сможет за меня "починить"?

Отправлено: 11:18, 21-07-2014

 

Аватара для gora

Ушёл из жизни


Сообщения: 6040
Благодарности: 3488

Профиль | Отправить PM | Цитировать


Цитата Wheee111:
по непонятной мне причине перестал функционировать »
Для смены иконки на папке нужно еще менять атрибут R самой папки, да и запись в ini файл несколько отличается для XP и 7.
[решено] Как присвоить папке определенную иконку
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:08, 21-07-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 31
Благодарности: 4

Профиль | Отправить PM | Цитировать


gora, спасибо за ответ. вопрос по 7x64.
у папки "read only" не стоит. тестировал на новых, старых, с полными правами etc..
Ваш вариант слегка не удобен тем, что значки нужно каждый раз копировать откуда-то в нужную папку. можно ли их подтягивать из одного и того же места?

Отправлено: 17:35, 21-07-2014 | #3


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата Wheee111:
Собственно теперь сам вопрос: кто нибудь его сможет за меня "починить"? »



Примерно так:


Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\Test1]
@=""
"ExtendedSubCommandsKey"=""
"Icon"="C:\\ICOFolders\\Red.ico,0"
;"Position"="Top" ;Крайне не рекомендую.
"MUIVerb"="Сменить иконку"
"SubCommands"=""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell]

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Black]
@="Black"
"Icon"="C:\\ICOFolders\\Black.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Black\command]
@="cmd /c \"cd /d \"%L\"& attrib -s -h desktop.ini>nul& echo [.ShellClassInfo]>desktop.ini& echo IconResource=C:\\ICOFolders\\Black.ico,0>>desktop.ini& attrib +s +h desktop.ini& attrib +r \"%L\"& exit\""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Red]
@="Red"
"Icon"="C:\\ICOFolders\\Red.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Red\command]
@="cmd /c \"cd /d \"%L\"& attrib -s -h desktop.ini>nul& echo [.ShellClassInfo]>desktop.ini& echo IconResource=C:\\ICOFolders\\Red.ico,0>>desktop.ini& attrib +s +h desktop.ini& attrib +r \"%L\"& exit\""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Green]
@="Green"
"Icon"="C:\\ICOFolders\\Green.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Green\command]
@="cmd /c \"cd /d \"%L\"& attrib -s -h desktop.ini>nul& echo [.ShellClassInfo]>desktop.ini& echo IconResource=C:\\ICOFolders\\Green.ico,0>>desktop.ini& attrib +s +h desktop.ini& attrib +r \"%L\"& exit\""

.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:11, 21-07-2014 | #4


Аватара для gora

Ушёл из жизни


Сообщения: 6040
Благодарности: 3488

Профиль | Отправить PM | Цитировать


Цитата Wheee111:
вопрос по 7x64.
у папки "read only" не стоит. »
Ответ по win7 x64: У меня атрибут "R" стоит и прекрасно виден в файловом менеджере "Total Commander"



Цитата Wheee111:
можно ли их подтягивать из одного и того же места? »
Пишите полный путь к иконке и иконку можно не копировать в папку.

Отправлено: 18:13, 21-07-2014 | #5


Новый участник


Сообщения: 31
Благодарности: 4

Профиль | Отправить PM | Цитировать


gora, Премного благодарен за скриптик. он таки отработал нормально. но есть пара вопросов еще, и был бы весьма признателен, если бы помогли с ними.
1) переделал команду в реестре на следующее чудовище:
Код: Выделить весь код
cmd /k "cd /d %L" 
&& attrib -h -s *.ico 
&& del *.ico 
&& copy /Y C:\ICOFolders\Black.ico Black.ico 
&& copy /Y C:\ICOFolders\c.cmd c.cmd 
&& c.cmd 
&& del c.cmd 
&& attrib +h +s black.ico 
&& exit

*где c.cmd - Ваш скрипт.
Вопрос по нему: как запихнуть в скрипт "c.cmd" назначение атрибутов файлу иконки, которое прописалось в desktop.ini
Если я правильно понял, то переменная %%~nxi равна *имя_иконки*.ico,0
Пардон за глупый вопрос, не силен в скриптах.
т.е. в тушку Вашего скрипта хочу добавить
Код: Выделить весь код
Attrib +H +S "имя_иконки*.ico"
2) возможно я что-то не так понял, но что если в папке будет лежать несколько ico файлов?
3) Может быть знаете команду обновления иконки, которая исполняется при назначении иконки через свойства папки? (если задавать через Свойства\настройка\сменить значок, то новый значок появляется сразу же)
В принципе чистка кэша иконок вариант, но для этого нужно "убивать" explorer.exe, и при этом закрываются открытые папки. а это не удобно.
Чистка кэша таким образом: ie4uinit.exe -ClearIconCache почему то не помогает.
____________________________________

Цитата gora:
Цитата Wheee111:
можно ли их подтягивать из одного и того же места? »
Пишите полный путь к иконке и иконку можно не копировать в папку. »
в таком случае, как я понял, нужно будет плодить скрипты для каждой иконки отдельно.

Цитата gora:
Цитата Wheee111:
вопрос по 7x64.
у папки "read only" не стоит. »
Ответ по win7 x64: У меня атрибут "R" стоит и прекрасно виден в файловом менеджере "Total Commander" »
То ли я не понял Вас, то ли вы меня.
Цитата gora:
Для смены иконки на папке нужно еще менять атрибут R самой папки, да и запись в ini файл несколько отличается для XP и 7. »
Я решил что вы имеете в виду что у папки обязательно должен быть снят атрибут "только чтение".

Последний раз редактировалось Wheee111, 23-07-2014 в 12:49. Причина: добавил ответы на сообщения выше.


Отправлено: 11:26, 23-07-2014 | #6


Аватара для gora

Ушёл из жизни


Сообщения: 6040
Благодарности: 3488

Профиль | Отправить PM | Цитировать


Попробуйте этот скрипт:
Код: Выделить весь код
@Echo Off
ChCp 1251>Nul
:: Скрипт SetIcon.cmd
:: Запуск скрипта SetIcon.cmd "Путь к папке у которой меняем иконку" "Имя файла иконки без пути"
Set fldr=%~1
If Not Defined fldr Exit
If "%fldr:~-1%"=="\" Set fldr=%fldr:~0,-1%
Set icon=%~2
If Not Defined icon Exit
:: Папка с иконками и скриптом SetIcon.cmd
Set home=c:\ICOFolders
If Exist "%fldr%\desktop.ini" Attrib -H -S "%fldr%\desktop.ini"
If "%icon%"=="No" (
	Del "%fldr%\desktop.ini"
	Attrib -R "%fldr%"
	Exit
)
(Echo [.ShellClassInfo]
Echo IconResource="%home%\%icon%",0
Ver | Find "6.">Nul || (Echo IconFile="%home%\%icon%"& Echo IconIndex=0)
)>"%fldr%\desktop.ini"
Attrib +H +S "%fldr%\desktop.ini"
Attrib +R "%fldr%"
Положите его в папку с иконками, а в команде его запуска (то, что вы делаете через контекстное меню) пропишите два параметра: "Путь к папке у которой меняем иконку" "Имя файла иконки без пути"

Последний раз редактировалось gora, 23-07-2014 в 19:10. Причина: дополнил режимом восстановления стандартной иконки

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:57, 23-07-2014 | #7


Новый участник


Сообщения: 31
Благодарности: 4

Профиль | Отправить PM | Цитировать


gora, Шикарно. это как раз то, что я имел в виду в первом посте.
только я туплю и не могу в строке запуска передать путь к папке скрипту. Если путь забиваю статикой- всё отлично. а как туда подставить результат работы команды?
Прошу прощения за очередной глупый вопрос. в итоге Вы за меня реализовали целиком идею )

Отправлено: 15:54, 23-07-2014 | #8


Аватара для gora

Ушёл из жизни


Сообщения: 6040
Благодарности: 3488

Профиль | Отправить PM | Цитировать


Цитата Wheee111:
я туплю »
Жаль...
Тогда попробуйте запустить reg файл.
Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\Test1]
@=""
"ExtendedSubCommandsKey"=""
"Icon"="C:\\ICOFolders\\Red.ico,0"
"MUIVerb"="Сменить иконку"
"SubCommands"=""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell]

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Black]
@="Black"
"Icon"="C:\\ICOFolders\\Black.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Black\command]
@="C:\\ICOFolders\\SetIcon.cmd \"%L\" \"Black.ico\""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Red]
@="Red"
"Icon"="C:\\ICOFolders\\Red.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Red\command]
@="C:\\ICOFolders\\SetIcon.cmd \"%L\" \"Red.ico\""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Green]
@="Green"
"Icon"="C:\\ICOFolders\\Green.ico,0"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\Green\command]
@="C:\\ICOFolders\\SetIcon.cmd \"%L\" \"Green.ico\""

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\zDefault]
@="Restore Default"

[HKEY_CLASSES_ROOT\Folder\shell\Test1\Shell\zDefault\command]
@="C:\\ICOFolders\\SetIcon.cmd \"%L\" \"No\""

Последний раз редактировалось gora, 23-07-2014 в 19:11. Причина: дополнил режимом восстановления стандартной иконки

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:33, 23-07-2014 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Смена иконки папки. контекстное меню (реестр) + CMD

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Добавление пользовательских пунктов в контекстное меню (файлы, папки и т.д.) R.M.L Оформление Windows XP 158 24-08-2020 14:50
Блог - Как добавить пункт «Закрепить в меню Пуск» в контекстное меню папки hb860 Microsoft Windows 7 4 18-10-2012 06:04
Ресурсы - [решено] Как добавить иконки в контекстное меню XP А_н_д_р_ей Оформление Windows XP 6 26-12-2011 20:50
CMD/BAT - [решено] Смена расположения папки через реестр luvgalz Скриптовые языки администрирования Windows 2 20-01-2011 14:46
Интерфейс - контекстное меню папки nureke Microsoft Windows 2000/XP 1 05-04-2008 09:11




 
Переход