CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
-
anoxina
CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Вывести сведения о зарегистрированных действиях для заданного расширения файла и программах, выполняющих эти действия. Нельзя использовать 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"
Примеры запуска:
> 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"
-
anoxina
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Цитата anoxina:
Нельзя использовать assoc
Почему?
Нельзя использовать assoc
CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Почему?
-
anoxina
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Выявилась следующая проблема, при вводе, например, расширения .java выводятся не все команды данного расширения, т. е. выводит "open:", а дальше error, но нужно чтобы выводились все команды
И в случае когда выдает ошибки в For Нужно их скрывать
И в случае когда выдает ошибки в For Нужно их скрывать
-
anoxina
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Такие условия задачи... По сути нужно сделать программу которая работает вместо команды assoc
-
greg zakharov
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Код:
Код: Выделить всё
@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 "
""
".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-
Foreigner
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
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^|/?]-
anoxina
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
anoxina, Расширение принято обозначать с точкой. Исправьте верх батника (и кодировку 437, т.к. utf-8 не везде работает)
Код:
строку -- :: ftype %assoc% можно убрать, я просто смотрел вывод
Цитата anoxina:
не расскажите как это работает?
Нет времени, если коротко, то сначала получаем значение ассоциации расширения, а потом с помощью него находим соответствующие команды на открытие и печать. Все эти данные находятся в ресстре, в HKCR, кодовую страницу (chcp 437) меняем, для удобства обработки строк.
Код:
Код: Выделить всё
@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:
не расскажите как это работает?
CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Нет времени, если коротко, то сначала получаем значение ассоциации расширения, а потом с помощью него находим соответствующие команды на открытие и печать. Все эти данные находятся в ресстре, в HKCR, кодовую страницу (chcp 437) меняем, для удобства обработки строк.
-
anoxina
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Цитата 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"
Точнее что она полностью делает
for /f "tokens=*" %%i in ('reg query hkcr\%ext:..=.% /ve')
CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Объясните что делает вот эта строчка
Цитата Foreigner:
for /f "tokens=*" %%i in ('reg query hkcr\%1 /ve') do for %%j in (%%i) do set "assoc=%%j"
CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Точнее что она полностью делает
-
anoxina
Re: CMD/BAT - [решено] Вывести сведения о зарегистрированных действиях для заданного расширения файла
Код:
В первом цикле for берет из реестра с помощью штатной утилиты reg.exe значение HKCR\.расширение по умолчанию (ключ /ve), во втором for обрабатывает полученную строку (забирает из нее последний токен) и присваивает его переменной assoc. Например в консоли:
После первого цикла выделена строка, которую обрабатываем во втором цикле, что бы получить значение ассоциации для .txt. Если оба цикла совместить, то получим нужную информацию:
Код: Выделить всё
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. Если оба цикла совместить, то получим нужную информацию: