Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Тонкости работы с реестром ОС Windows


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

F®ost
Статус: Специалист
Рейтинг: 2005
∙ повысить рейтинг »
Black Cloud
Статус: Практикант
Рейтинг: 1596
∙ повысить рейтинг »
Kom906
Статус: 6-й класс
Рейтинг: 1370
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Установка и настройка ОС / Тонкости работы с реестром ОС Windows

Номер выпуска:568
Дата выхода:23.08.2009, 16:05
Администратор рассылки:Alexey G. Gladenyuk, Управляющий
Подписчиков / экспертов:950 / 228
Вопросов / ответов:1 / 2
IRC-канал по теме:#registry

Вопрос № 171451: Здравствуйте! У меня вопрос по ассоциациям файлов. Я пользуюсь портативными программами и хочу автоматизировать ассоциацию, чтобы не настраивать каждый раз через свойства файла. Помогите написать bat-файл, чтобы нужный файл открывался программой, нев...



Вопрос № 171451:

Здравствуйте! У меня вопрос по ассоциациям файлов. Я пользуюсь портативными программами и хочу автоматизировать ассоциацию, чтобы не настраивать каждый раз через свойства файла. Помогите написать bat-файл, чтобы нужный файл открывался программой, неважно в каком месте она будет находиться! Помню сталкивался с таким файлом, но не могу найти его код заново!
То есть, программа и батник лежат в одной папке, и путь до программы, по идее, должен быть переменной!
Заранее спасибо!

Отправлен: 18.08.2009, 15:49
Вопрос задал: Antonmerkulov, 1-й класс
Всего ответов: 2
Страница вопроса »


Отвечает Kom906, 6-й класс :
Здравствуйте, Antonmerkulov.

Вот на примере текстового файла.
Программа для открытия и иконка лежат в том же каталоге, что и cmd-файл. При выполнении cmd-файла, текстовый файл сопостовляется с программой, лежащей в том же каталоге
Текст cmd-файла:

reg add "HKCR\.txt" /ve /t REG_SZ /d txtfile /f

reg add "HKCR\txtfile\DefaultIcon" /ve /t REG_SZ /d %~dp0\notepad.ico /f

reg add "HKCR\txtfile\shell\open\command" /ve /t REG_SZ /d "%~dp0\notepad.exe %%1" /f

Поясню, что к чему.
В первой строчке файлы с расширением .txt "сопостовляются" с типом файлов "txtfile". Во второй строчке присваивается иконка для таких файлов. В третьей строчке сопоставляется приложение для открытия по умолчанию (все это в принципе и так понятно).
Часть команды "reg add" - запуск утилиты для редактирования рее стра из командной строки.
Далее идет ключ реестра (что очевидно).
Часть команды "/ve /t REG_SZ" - определяют параметр по умолчанию в ключе реестра, и его тип REG_SZ (может быть и REG_EXPAND_SZ, но тогда значение нужно задавать двоичным)
Ключ "/f" указывает записывать без запроса на перезапись
После ключа "/d" идет само значение параметра по умолчанию. Символы "%~dp0" и есть переменная, которая равна пути к папке, из которой запускается cmd-файл. Только обратите внимание, что в cmd-файле надо писать "%%1", тогда запишется в реестр "%1"

К примеру, если запустить команду:
reg add "HKCR\txtfile\shell\open\command" /ve /t REG_SZ /d "%~dp0\notepad.exe %%1" /f

из cmd-файла, расположенного в папке C:\notepad, то в реестре будет записано значение:
C:\notepad\notepad.exe %1

Конечно, для каждого приложения набор к лючей открытия файла может быть свой

Ответ отправил: Kom906, 6-й класс
Ответ отправлен: 21.08.2009, 03:02

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253424 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Алексеев Владимир, Практикант :
    Здравствуйте, Antonmerkulov.
    bat-файл - это пережиток MsDOS, предлагавшей ограниченный набор команд из ком-процессора Command.com и несколько отдельных команд-файлов (FDISK.EXE, FORMAT.COM, SMARTDRV.EXE…). Основа современных cmd-файлов - командный процессор Cmd.exe, предлагающий намного более широкие возможности для программирования.
    Благодаря Microsoft-политике совместимости программного обеспечения устаревшие bat-файлы могут работать и под новой ОС (ОперСистемой) WindowsXp, но во избежание двусмысленного толкования разумнее называть вещи своими именами.
    Давайте напишем cmd-файл, связывающий файл-тип с расширением .xxx (из Вашего примера в мини-форуме) с какой-нибудь программой для открытия этого файла (например, текстовый редактор notepad.exe). Создадим текстовый файл 1.xxx и попыткой открыть его убедимся, что ОС "не знает" чем открывать этот тип. (Чтоб ОС "забыла" о нём, удалите раздел HKEY_CLASSES_ROOT\XxxFile ).
    В первой строке нашего Assoc.cmd команда @Echo off запрещает отображать мешающие тексты командных слов в ниже-строках. Символ @ перед Echo скрывает отображение текста текущей, первой строки. Символ & позволяет употребить в одной строке несколько операторов, что делает текст большой программы удобо-читаемым (не растягивает на много экранов). После команды rem можно вписывать комментарии, поясняющие алгоритм.
    Во второй строке программа объявляет Executing %0, что по-русски означает "Исполняется ВашПуть\Assoc.cmd". Это удобно при диагностике ошибок, связанных с текущим путём и не-нахождением в нём каких-либо файлов-помощников. Doskey `=Exit помогает творческим лентяям закрывать окно программы при стоп-отладке после паузы на заданном этапе. Вместо ввода команды Exit достаточно будет нажать клавишу Esc, независимую от текущей клав-раскладки, и нажать Enter.

    Команда Echo. создаёт на экране пустую разделитель-строку перед очередным Вашим назначением.
    Команда A ssoc .xxx=XxxFile привязывает расширение .xxx к типу XxxFile , а команда
    Ftype XxxFile=Notepad.exe %%1
    задаёт программу-открывачку (Notepad.exe) для открытия типа XxxFile с открываемым файлом, заданным как параметр %%1 , который в процессе исполнения cmd-файла изменится на %1. После исполнения этой тройки команд создаётся раздел HKEY_CLASSES_ROOT\XxxFile\Shell\Open\Command с параметром @=Notepad.exe %1 , и станет возможным открывать файл 1.xxx даже без перезагрузки!
    Но Вы не увидите этот раздел, если окно редактора реестра было открыто до исполнения Assoc.cmd (в Windows2000 этого "косяка" не было). В WindowsXp надо в окне редактора реестра нажать клавишу F5 для обновления экранного отображения с жёсткого диска.
    Обратите внимание, что Notepad.exe задан без пути. Такое упрощение допустимо, поскольку его путь прописан в системной переменной Path (в моей ОС
    PATH=D:\WINDOWS\system32;D:\WIN DOWS;D:\WINDOWS\system32\WBEM;D:\Progra~1\WinRar
    позволяет задавать даже кмд Rar.exe без пути). Если путь к Вашей "открывачке" не прописан в Path, то его надо задать полностью, а если путь содержит пробелы, то надо заключить его в кавычки. Пример синтакса: команда ftype Word.Document.8 (для .doc-файлов) возвращает:
    Word.Document.8="D:\Program Files\Microsoft Office\Office10\WINWORD.EXE" /n /dde

    Если Вам очень хочется назначить иконку или принт-дополнения к своему файл-типу, то команда Reg add может упаковать Ваши reg-строки из мини-форума как добавки в существующий Assoc.cmd.
    Команда Echo Will assign icon (="предстоит назначение иконки") - комментирует очередное задание, поскольку ниже Reg-команда авто-отчитывается об успешности исполнения, не сообщая чем она занималась.
    В команде Reg add Hkcr\XxxFile\DefaultIcon - имя создаваемого раздела, /ve - параметр @ , /d shimgvw.dll,2 - присваиваемое значение, /f =перезапись существующего значения без диалог-запроса.
    Если Ваша иконка не прописана в системной dll или Path, то её также надо указать с полным п утём, а при наличии пробелов заключить в кавычки.
    Команда Pause задерживает отображение процесса исполнения на экране до нажатия любой клавиши.

    Для ознакомления с синтаксом выше-перечисленных команд можно в окне командной строки (Пуск \Выполнить \Cmd) задать любую из них с ключём /?
    reg add /?
    Хороший "Справочник по параметрам командной строки" имеется в Центре справки и поддежки (клав-сочетание Windows+F1).
    Семейство reg-команд исходно не исполняется в ОС Windows2000, но можно скопировать файл reg.exe из WindowsXp \WINDOWS\system32\ , и Windows2000 "удочеряет" его в своей \Winnt\system32\
    Готовый Assoc.rar Вы можете скачать. Удачи Вам в автоматизации!

    -----
    Жизнь - это творчество!

    Ответ отправил: Алексеев Владимир, Практикант
    Ответ отправлен: 21.08.2009, 18:55

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253445 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.7 от 15.08.2009

    В избранное