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

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

Ответить
Настройки темы
CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла

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


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

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


Вывести сведения о зарегистрированных действиях для заданного расширения файла и программах, выполняющих эти действия. Нельзя использовать assoc.

Примеры запуска:
> accocx.cmd /?
> accocx.cmd txt
> accocx.cmd .txt
open: C:\WINDOWS\system32\NOTEPAD.EXE %1
print: C:\WINDOWS\system32\NOTEPAD.EXE /p %1
printto: C:\WINDOWS\system32\notepad.exe /pt "%1" "%2" "%3" "%4"

Отправлено: 19:40, 06-12-2015

 

Ветеран


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

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


Цитата anoxina:
Нельзя использовать assoc »
Почему?
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:02, 06-12-2015 | #2



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

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


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


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

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


Такие условия задачи... По сути нужно сделать программу которая работает вместо команды assoc

Отправлено: 20:08, 06-12-2015 | #3


Ветеран


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

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


Понятно:
Код: Выделить весь код
reg /?
for /?
set /?
if /?
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:11, 06-12-2015 | #4


Забанен


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

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


Код: Выделить весь код
@echo off
  setlocal
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "%i%" equ "1" if "%i%" equ "/?" goto:man
    if "%i%" neq "1" goto:man
    
    set "ext=%1"
    if "%ext:~0,1%" neq "." set "ext=.%ext%"
    for /f "skip=3 tokens=2,*" %%i in (
      '2^>nul reg query "HKCR\%ext%" /ve'
    ) do (
      for /f "tokens=4 delims=\" %%k in (
        'reg query "HKCR\%%j\shell"'
      ) do (
        for /f "skip=3 tokens=2,*" %%l in (
          'reg query "HKCR\%%j\shell\%%k\command" /ve'
        ) do echo:%%k: %%m
      )
    )
  endlocal
exit /b

:man
  for %%i in (
    "Usage: %~n0 <extension>"
    ""
    ".e.g.: C:\>%~n0 txt"
    ".e.g.: C:\>%~n0 .txt"
    "Output:"
    "   open: %%SystemRoot%%\system32\NOTEPAD.EXE %%1"
    "   print: %%SystemRoot%%\system32\NOTEPAD.EXE /p %%1"
    "   printto: %%SystemRoot%%\system32\notepad.exe /pt "%%1" "%%2" "%%3" "%%4""
  ) do echo:%%~i
exit /b

Отправлено: 09:56, 07-12-2015 | #5


Ветеран


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

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


greg zakharov, Какая виндовс? У меня что-то ваш вариант не работает.
Код: Выделить весь код
@echo off
setlocal

if "%1"=="/?" goto:help
if "%1"=="" goto:help

1>nul chcp 65001

for /f "tokens=*" %%i in ('reg query hkcr\%1 /ve') do for %%j in (%%i) do set "assoc=%%j"

:: ftype %assoc%

for %%i in (open print printto) do (

    for /f "tokens=2*" %%j in ('reg query hkcr\%assoc%\shell\%%i\command ^| findstr "REG_"') do (

        echo %%i: %%k

))

1>nul chcp 866
goto:eof

:help
echo Usage: %~n0 [.ext^|/?]
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:07, 07-12-2015 | #6


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


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

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


Foreigner, Большое спасибо, не расскажите как это работает?
И еще проблема в том, например пишешь "> accocx.cmd txt" ничего не работает, а выдает ошибку, не знаете как это исправить?
Буду очень благодарна Вам))

Отправлено: 12:48, 07-12-2015 | #7


Ветеран


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

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


anoxina, Расширение принято обозначать с точкой. Исправьте верх батника (и кодировку 437, т.к. utf-8 не везде работает)
Код: Выделить весь код
@echo off
setlocal

if "%1"=="/?" goto:help
if "%1"=="" goto:help
set "ext=.%1"

1>nul chcp 437

for /f "tokens=*" %%i in ('reg query hkcr\%ext:..=.% /ve').....
строку -- :: ftype %assoc% можно убрать, я просто смотрел вывод
Цитата anoxina:
не расскажите как это работает? »
Нет времени, если коротко, то сначала получаем значение ассоциации расширения, а потом с помощью него находим соответствующие команды на открытие и печать. Все эти данные находятся в ресстре, в HKCR, кодовую страницу (chcp 437) меняем, для удобства обработки строк.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 07-12-2015 | #8


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


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

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


Цитата Foreigner:
for /f "tokens=*" %%i in ('reg query hkcr\%ext:..=.% /ve') »
Объясните что делает вот эта строчка

Цитата Foreigner:
for /f "tokens=*" %%i in ('reg query hkcr\%1 /ve') do for %%j in (%%i) do set "assoc=%%j" »
Точнее что она полностью делает

Отправлено: 19:18, 13-12-2015 | #9


Ветеран


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

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


Код: Выделить весь код
for /f "tokens=*" %%i in ('reg query hkcr\%1 /ve') do for %%j in (%%i) do set "assoc=%%j"
В первом цикле for берет из реестра с помощью штатной утилиты reg.exe значение HKCR\.расширение по умолчанию (ключ /ve), во втором for обрабатывает полученную строку (забирает из нее последний токен) и присваивает его переменной assoc. Например в консоли:



После первого цикла выделена строка, которую обрабатываем во втором цикле, что бы получить значение ассоциации для .txt. Если оба цикла совместить, то получим нужную информацию:

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

Отправлено: 19:48, 13-12-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Удаление файлов заданного расширения Папуас Программное обеспечение Windows 11 25-02-2019 15:04
Службы - Отсутствует исполняющее ядро для расширения имени файла vbs raphael_green@vk Microsoft Windows 7 3 05-12-2018 18:52
CMD/BAT - Вывести сведения о зарегистрированных действиях для заданного расширения файла kudrjavcev Скриптовые языки администрирования Windows 0 06-12-2015 19:15
CMD/BAT - [решено] Изменение расширения файла без расширения Алексей_Зайцев@vk Скриптовые языки администрирования Windows 16 10-10-2014 15:58
Интерфейс - [решено] Как отобразить расширения зарегистрированных типов файлов? Omu Microsoft Windows 7 2 08-04-2011 22:55




 
Переход