Ну, вы можете использовать команды ftype
и assoc
для создания или удаления ассоциаций типов файлов:
ASSOC .foo=FooFile
FTYPE FooFile=X:\Foo\foo.exe %1 %*
Вы можете удалить их позже с помощью
FTYPE FooFile=
ASSOC .foo=
РЕДАКТИРОВАТЬ: Сейчас у меня есть попытка с чем-то, что позволяет вам восстановить связь по умолчанию. Я положил его в мой репозиторий Subversion . На своем текущем этапе он генерирует два новых пакетных файла: set.cmd
и reset.cmd
; один из которых устанавливает новую ассоциацию, другой меняет ее. Завершение set.cmd
в реальную партию не должно быть слишком сложным, но это сделало бы испытание здесь адом, поэтому я оставлю это в качестве упражнения.
Код следует, его нужно прокомментировать, надеюсь.
@echo off
setlocal enableextensions enabledelayedexpansion
rem Debug flag. Generates a little more output; un-set if undesired
set DEBUG=1
rem Parse arguments and help
if [%1]==[] goto Usage
if [%2]==[] goto Usage
rem Find out whether the association is taken
for /f "usebackq tokens=2* delims==" %%x in (`assoc .%1 2^>nul`) do set assoc_old=%%x
if defined DEBUG (
if defined assoc_old (echo Association already defined: [%assoc_old%]) else (echo Association not yet taken)
)
rem Find a new, unused association
rem Note that we assume that we find one, eventually. This isn't guaranteed, but we'll ignore that for the moment
rem Otherwise this loop might run forever
:loop
set assoc_new=My.%1.%RANDOM%
if defined DEBUG echo Trying new association (%assoc_new%)
assoc .%1 >nul 2>nul
if errorlevel 1 (
set assoc_new=
if defined DEBUG echo Didn't work out
) else (
if defined DEBUG echo Found one! \o/
)
if not defined assoc_new goto loop
if defined DEBUG echo Writing reset batch file
echo @echo off>reset.cmd
echo assoc .%1=%assoc_old%>>reset.cmd
echo ftype %assoc_new%=>>reset.cmd
if defined DEBUG echo Writing setting batch file
echo @echo off>set.cmd
echo assoc .%1=%assoc_new%>>set.cmd
echo ftype %assoc_new%=%2 %%1>>set.cmd
goto :eof
:Usage
echo.Usage
echo. %~nx0 type command
echo.
echo. type is the file type to override, such as docx or txt.
echo. No dot before it is necessary.
echo. command is the command to perform on that file.
echo. %%1 is automatically appended at the end.
echo. If the command includes spaces, surround it with quotes.
echo.
echo.Example
echo. %~nx0 txt notepad
exit /b 1