Измените значок папки с помощью специального меню, вызываемого правой кнопкой мыши.
Я пытаюсь создать собственное меню, вызываемое правой кнопкой мыши, которое позволяет мне установить собственный значок папки, используя что угодно.folder.ico
Я положил в эту папку.
Мой путь на данный момент:
Иметь контекстное меню по папкам, в котором запускается командный файл (сделано благодаря этой теме ):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\set_folder_icon]
@="Set folder icon"
[HKEY_CLASSES_ROOT\Directory\shell\set_folder_icon\command]
@="\"C:\\path\\set_folder_icon.bat\" \"%1\""
Что касается bat-файла, мне не удается заставить его работать. Боюсь, это потому, что я не могу заставить его выбрать папку, на которой я щелкаю правой кнопкой мыши.
Я основывал свою работу на этой теме :
rem @echo off
set O=desktop.old
set F=desktop.ini
FOR /R %%I IN (*.ico) DO @(
cd%%~pI
if exist %%~dpnfolder.ico (
echo %%~dpnfolder.ico
attrib -h -s %F%
copy /Y %F% %O%
echo [.ShellClassInfo] > %F%
echo IconResource=folder.ico,0 >> %F%
echo [ViewState] >> %F%
echo Mode= >> %F%
echo Vid= >> %F%
echo FolderType=Generic >> %F%
attrib +h +s %F%
)
)
pause
Я хотел бы просто проверить, существует лиfolder.ico, отредактировать Desktop.ini или создать его полностью, если он не существует (я не знаю, может ли это сделать текущая бита), и в идеале (но не обязательно) нет отредактируйте другие параметры, которые могут быть там уже.
1 ответ
@echo off
setlocal EnableExtensions
title <nul && title ..\\%~nx0
%__AppDir__%chcp.com 1252 >nul
set "_bat=%~dpnx0" & %__AppDir__%mode.com 40,02
set "_key=HKCR\Directory\shell\Set_Folder_Icon"
set "_reg_qry=%__AppDir__%reg.exe query "%_key%""
set "_ico_reg=%SystemRoot%\System32\shell32.dll,71"
set "_bat=%_bat:\=\\%" & set "_ico_reg=%_ico_reg:\=\\%"
>nul 2>&1 ( %__AppDir__%net.exe "session" && set "_adm=y" || set "_adm=n"
%_reg_qry%|%__AppDir__%find.exe "_" && set "_reg=y" || set "_reg=n")
if /i "%_adm%|%_reg%" == "y|n" >nul 2>&1 (
( %__AppDir__%reg.exe add "%_key%" /ve /d "Set Folder Icon" /f
%__AppDir__%reg.exe add "%_key%\command" /ve /d "\"%_bat%\" \"%%V\"" /f
%__AppDir__%reg.exe add "%_key%" /v Icon /t reg_sz /d "\"%_ico_reg%\"" /f
)&& goto %:^))else if /i "%_adm%|%_reg%" == "n|n" (set "_er=y" && goto %:^|
)else if "%_adm%%_reg%" == "yy" (set "_er=n" && goto %:^|)else ;set "_er=n"
%:^)
2>nul cd/d "%~dpnx1\\." && %__AppDir__%Attrib.exe -r -a .\. || goto %:^|
if exist .\\Folder.ico (%__AppDir__%Attrib.exe -s -r -h +a .\\Folder.ico
)else if exist .\\*.ico (for %%i in (.\\*.ico)do ren "%%~fi" Folder.ico & goto %:^/
)else goto %:^| )
%:^/
if exist .\\Desktop.ini >.\\Desktop.old (
%__AppDir__%Attrib.exe -s -r -h +a .\\Desktop.ini
echo;[.ShellClassInfo] && echo;IconResource=Folder.ico,0
%__AppDir__%Findstr.exe /bliv "\[\.Shell IconR IconF IconI" <.\\Desktop.ini
)else >nul 2>&1 %__AppDir__%CertUtil.exe -decode -f "%~dpnx0" .\\Desktop.ini
if exist .\\Desktop.old >nul 2>&1 move/y .\\Desktop.old .\\Desktop.ini
%:^|
if "%_er%" == "y" (%__AppDir__%timeout.exe 5|echo\Admin rights required!
)else if "%_er%" == "n" (%__AppDir__%Attrib.exe +s +r +h -a .\\Desktop.ini
<con: %__AppDir__%Attrib.exe -r +a .\. && %__AppDir__%Attrib.exe +r -a .\.
<con: cd../ && %comSpec% /e:off/v:off/s/q/r "ren "%~dpnx1" "%~nx1" >nul 2>&1"
)>nul 2>&1 else rem :: batch continue.
2>nul del/q /f /a "%~f1\Desktop.old" & endlocal & <con: move nul 2>&0 ||goto :eOf
::-----BEGIN -----Wy5TaGVsbENsYXNzSW5mb10gDQpJY29uUmVzb3VyY2U9LlxGb2xkZXIuaWNvLDA
NCltWaWV3U3RhdGVdDQpNb2RlPQ0KVmlkPQ0KRm9sZGVyVHlwZT1HZW5lcmljDQo=-----END -----::
Этот код учитывает:
Что вы собираетесь положить бат в ту папку, где он должен быть, где он всегда будет вызываться.
Запустится в первый раз (от имени администратора), чтобы необходимые записи в реестре Windows были добавлены (самой битой) и указали местоположение вашего компьютера.
File.bat
.Следующие выполнения будут вызываться в меню правой кнопки мыши в целевой папке.
Если файл Folder.ico находится в целевой папке, он будет использоваться, в случае отсутствия будет использоваться другой файл значка, переименованный в
Если файл существует в целевой папке, будут внесены необходимые изменения для замены файла.
.ico
файл, если нет, будет создан новый.
1. Запустите в первый раз от имени администратора, и все записи будут добавлены в реестр Windows.
2. Выполните (щелкните/запрос), не указывая действительную папку в качестве параметра, и процесс будет прерван.
3. Сообщите действительную папку, и она проверит, присутствует ли значок Folder.ico, и будет использовать его, если он не существует, он будет использовать другой, который находится в той же папке.
4. Если в указанной папке нет значка, она прервется без предупреждений.
5. Если в папке есть\Desktop.ini
, будут использованы все настройки, кроме тех, которые относятся к параметрам значков.
6. Если в папке нет>\Desktop.ini
, он создаст его, используя декодирование стандартного файла, сохраненного в строках base64.
- По умолчанию используются папки, которые не содержат конфигурации.
[.ShellClassInfo]
IconResource=.\Folder.ico,0
[ViewState]
Mode=
Vid=
FolderType=Generic
- Кодировка Base64:
-----BEGIN CERTIFICATE-----
Wy5TaGVsbENsYXNzSW5mb10gDQpJY29uUmVzb3VyY2U9LlxGb2xkZXIuaWNvLDAN
CltWaWV3U3RhdGVdDQpNb2RlPQ0KVmlkPQ0KRm9sZGVyVHlwZT1HZW5lcmljDQo=
-----END CERTIFICATE-----
- Кодировка Base64
.\Desktop.ini
строки в bat/коде:
::-----BEGIN -----Wy5TaGVsbENsYXNzSW5mb10gDQpJY29uUmVzb3VyY2U9LlxGb2xkZXIuaWNvLDA
NCltWaWV3U3RhdGVdDQpNb2RlPQ0KVmlkPQ0KRm9sZGVyVHlwZT1HZW5lcmljDQo=-----END -----::
Примечание. Назначьте значок папке, некоторые отображаются сразу, другие через несколько секунд, похоже, то же самое происходит и при изменении обоев через реестр /командную строку Windows ...
Обс.:
CertUtil.exe
уже поставляется с Windows
Короткий ответ, в котором игнорируется наличие записей реестра, будет...
@echo off
setlocal EnableExtensions
%__AppDir__%mode.com 40,02
%__AppDir__%chcp.com 1252 >nul
2>nul cd/d "%~f1\\." || goto %:^|
if not exist ".\\Folder.ico" goto %:^|
<con: %__AppDir__%Attrib.exe -r -a .\.
if exist .\\Desktop.ini >.\\Desktop.old (
%__AppDir__%Attrib.exe -s -r -h +a .\\Desktop.ini
echo;[.ShellClassInfo] && echo;IconResource=.\Folder.ico,0
%__AppDir__%Findstr.exe /bliv "\[\.Shell IconR IconF IconI" <.\\Desktop.ini
) else >nul 2>&1 %__AppDir__%CertUtil.exe -decode -f "%~dpnx0" .\\Desktop.ini
if exist .\\Desktop.old >.\\Desktop.ini %__AppDir__%findstr.exe . <.\\Desktop.old
if exist .\\Folder.ico if exist .\\Desktop.ini (
%__AppDir__%Attrib.exe -r +a .\.
%__AppDir__%Attrib.exe +r -a .\.
%__AppDir__%Attrib.exe +r -a .\\Folder.ico
%__AppDir__%Attrib.exe +s +r +h -a .\\Desktop.ini
>con: cd..\ && %comSpec% /e:off/v:off/q/r "ren "%%~dpnx1" "%%~nx1". 2>nul")
%:^|
2>nul del/q /f /a "%~f1\Desktop.old" & endlocal & <con: move nul 2>&0 ||goto :eOf
::-----BEGIN -----Wy5TaGVsbENsYXNzSW5mb10gDQpJY29uUmVzb3VyY2U9LlxGb2xkZXIuaWNvLDA
NCltWaWV3U3RhdGVdDQpNb2RlPQ0KVmlkPQ0KRm9sZGVyVHlwZT1HZW5lcmljDQo=-----END -----::
Этот код учитывает:
Что записи в реестре сделаны, и путь к bat-файлу в реестре установлен правильно.
Файл уже существует в папке назначения.
Если ее нет в целевой папке, будет создана новая, если она существует, соответствующие изменения будут внесены в папку.
Folder.ico
файл будет создан в существующемDesktop.ini
.
- The
Set_Folder_Icon.reg
файл выглядит так:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon]
@="Set Folder Icon"
"Icon"="\"C:\\\\WINDOWS\\\\System32\\\\shell32.dll,71\""
[HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon\command]
@="\"F:\\\\2020-SU\\\\Q1635169\\\\Q1635169.cmd\" \"%V\""
; Just replace drive and folder\file name...
- The
Remove_Set_Folder_Icon.reg
файл выглядит так:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon]
- Чтобы добавить записи реестра в командной строке, запустите от имени администратора:
%__AppDir__%reg.exe add "HKCR\Directory\shell\Set_Folder_Icon" /ve /d "Set Folder Icon" /f
%__AppDir__%reg.exe add "HKCR\Directory\shell\Set_Folder_Icon\command" /ve /d "\"F:\\2020-SU\\Q1635169\\Q1635169.cmd\" \"%V\"" /f
%__AppDir__%reg.exe add "HKCR\Directory\shell\Set_Folder_Icon" /v Icon /t reg_sz /d "\"C:\\WINDOWS\\System32\\shell32.dll,71\"" /f
rem :: Just replace F:\\2020-SU\\Q1635169\\Q1635169.cmd\"
rem :: To the pertinent Drive:\\Folder\\Path\\To\\File\\Name.cmd
- Чтобы удалить записи реестра в командной строке, запустите от имени администратора:
reg delete HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon /f
- Вы также можете использовать
.cmd
вместо.reg
файл для добавления всех записей в реестр Windows
- Сохраните содержимое ниже как File.cmd и запустите его от имени администратора, чтобы добавить записи реестра.
Windows Registry Editor Version 5.00 2>nul
;The following line/commands run and add the current file by "itself"
;@(cls & %__APPDIR__%reg.exe import "%~f0" >nul 2>&1 & goto=:EOF )
[HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon]
@="Set Folder Icon"
"Icon"="\"C:\\\\WINDOWS\\\\System32\\\\shell32.dll,71\""
[HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon\command]
@="\"F:\\\\2020-SU\\\\Q1635169\\\\Q1635169.cmd\" \"%V\""
; Just replace drive and folder\file name...
- Чтобы сделать то же самое, чтобы удалить все записи в реестре Windows.
Windows Registry Editor Version 5.00 2<nul
;The following line remove HKCR\...\Set_Folder_Icon
;@(cls & %__APPDIR__%reg.exe import "%~f0" >nul 2>&1 & goto=:EOF )
[-HKEY_CLASSES_ROOT\Directory\shell\Set_Folder_Icon]
Еще немного чтения:
Как интерпретатор команд Windows cmd.exe анализирует сценарии
Практическое руководство: Escape-символы, разделители и кавычки в командной строке Windows.