Using REG.EXE, built into Windows XP, Windows Server 2003, and later, or installed on Windows 2000 from the Support Tools folder of
of the Windows 2000 CD-ROM, I have scripted AssocList.bat to generate a semi-colon delimited file containing:
Assoc;Ftype;Action;CommandString
Where:
Assoc is the file extension, like .txt. Two special extensions are Directory and Folder. Ftype is the registry sub-key in the HKCR key that houses the Action definition, like txtfile. Action is the command that appears on the context menu, like Open, Print, and Edit. CommandString defines the program and parameter(s) required to perform the Action, like %SystemRoot%\system32\NOTEPAD.EXE %1.The syntax for using AssocList.bat is:
AssocList \[ComputerName\]
Where ComputerName is optional, defaulting to the local computer.
The output is written to AssocList_<ComputerName>.txt in the current directory.
AssocList.bat contains:
@echo off setlocal ENABLEDELAYEDEXPANSION set comp=%1 if "%comp%" EQU "" set comp=%ComputerName% set comp=%comp:"=% set comp=%comp:\=% set file=AssocList_%comp%.txt if exist %file% del /q %file% set comp=\\%comp% set assoc=Directory set ftype=Directory set ftk="%comp%\HKLM\Software\Classes\Directory\Shell" call :quiet1>nul 2>&1 set assoc=Folder set ftype=Folder set ftk="%comp%\HKLM\Software\Classes\Folder\Shell" call :quiet1>nul 2>&1 call :quiet>nul 2>&1 endlocal goto :EOF :quiet for /f "Tokens=4 Delims=\" %%a in ('reg query "%comp%\HKLM\SOFTWARE\Classes"^|find "\."') do ( set assoc=%%a set key=HKLM\SOFTWARE\Classes\%%a for /f "Tokens=3*" %%b in ('reg query "%comp%\!key!" /Ve^|find "REG_"') do ( set ftype=%%c ) set ftk="%comp%\HKLM\Software\Classes\!ftype!\Shell" for /f "Tokens=*" %%d in ('reg query !ftk!^|find /i "Shell"') do ( for /f "Tokens=5* Delims=\" %%x in ('@echo %%d') do ( set command=%%y set ftl="%comp%\HKLM\Software\Classes\!ftype!\Shell\%%y\command" for /f "Tokens=3*" %%i in ('reg query !ftl! /Ve^|find "REG_"') do ( set prog=%%j @echo !assoc!;!ftype!;!command!;!prog!>>%file% ) ) ) ) goto :EOF :quiet1 for /f "Tokens=*" %%d in ('reg query %ftk%^|find /i "Shell"') do ( for /f "Tokens=5* Delims=\" %%x in ('@echo %%d') do ( set command=%%y set ftl="%comp%\HKLM\Software\Classes\%ftype%\Shell\%%y\command" for /f "Tokens=3*" %%i in ('reg query !ftl! /Ve^|find "REG_"') do ( set prog=%%j @echo %assoc%;%ftype%;!command!;!prog!>>%file% ) ) )
0 comments
Hide comments