[Batch] (APORTE) ASSOC7 (Crea, Asocia, Y desasocia tipos de archivos)

Iniciado por Eleкtro, 3 Marzo 2012, 12:36 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Hello world!

Estaba cansado de tener que usar "assoc" para buscar si existe una estenxion, Y luego "ftype" para buscar la asociacion de esa extensión... bah!

He creado mi propia utilidad, ASSOC7.



Muchos conocerán la utilidad "Associate.exe" de mierd@soft Microsoft, Pues hace basicamente CASI lo mismo que mi utilidad, Pero "Associate.exe" no funciona correctamente (Crea mal las asociaciones).

El modo de usar este script es parecida a la utilidad "Associate"...

ASSOC7[OPCIÓN] [Extension] [Programa]

Pero mejorado!  ;D

- Opciones:

 -a    (Asociar una extensión)
 -c    (Crear una extension y una asociación para esa extensión)
 -d    (Desasociar una asociación)


Ejemplo para asociar:
Código (dos) [Seleccionar]
ASSOC7.exe -a .url notepad.exe
(Ftype urlfile="C:\windows\system32\notepad.exe" "%1")

Ejemplo para crear:
Código (dos) [Seleccionar]
ASSOC7.exe -c .elektro "%Windir%\notepad.exe"
(Reg add "HKCR\.elektro\.elektro.file"
Ftype .elektro.file="C:\windows\system32\notepad.exe" "%1")

Ejemplo para desasociar:
Código (dos) [Seleccionar]
ASSOC7.exe -d .elektro
(Ftype .elektro.file="")




Comparaciones:

                                                                        ASSOC7       Associate
Funciona en Windows 7                                              SI                             NO

Crea asociaciones                                                      SI                             NO

Modifica asociaciones                                                 SI                             SI (...Las jode en Windows 7, Menos la del notepad, Todas las demás.)

Elimina asociaciones                                                  SI                             SI

Se pueden usar nombres cortos para los programas      SI                             SI (Solamente si la instalación del programa está registrada en "AppPaths")


No tengo nada más que añadir.

Espero que a alguien le sirva como me servirá a mi  ;D

Salu2!




El code:

Código (dos) [Seleccionar]
@Echo OFF
Title Associate 7     v1.0
REM| ASSOC7 v1.0
REM|
REM| By Elektro H@cker

REM| Herramienta para asociar y desasociar extensiones de archivos.
REM|
REM| Nota:
REM| Si una extensión no tiene una asociación, Se creará una nueva añadiendo el sufijo ".file" al nombre de la extensión.
REM| Por ejemplo, Si existe la extensión ".Elektro" Pero no está asociada. La nueva asociación se llamará ".Elektro.File".




REM Control de errores

If  "%1" EQU "/?" (Goto :AYUDA)
If  "%1" EQU "" (Goto :AYUDA)
If  "%2" EQU "" (Goto :AYUDA)
If /I "%~1" EQU "-d" (Goto :Buscar_clave)
If  "%3" EQU "" (Goto :AYUDA)

Echo %1 | Findstr /I /R "\-a \-c \-d" >NUL
If NOT %Errorlevel% EQU 0 (Goto :ERROR.SWITCH)


set num=0
If NOT Exist "%Windir%\System32\%~3" (
If NOT Exist "%~3" (
call :Buscar_programa "%~1" "%~2" "%~3"
)  ELSE (Set "Program=%~3")
) ELSE (
Set "Program=%Windir%\System32\%3"
)
If "%NUM%" EQU "3" (Goto :ERROR.PATH)


Reg query "HKCR\%~2" >NUL 2>&1
If NOT %Errorlevel% EQU 0 (
If /I "%~1" EQU "-c" (Goto :Comprobar_crear) ELSE (Goto :ERROR.EXT)
)


Goto :ASSOC7


:Buscar_clave
Reg query "HKCR\%~2" >NUL 2>&1
If NOT %Errorlevel% EQU 0 (Goto :ERROR.EXT) ELSE (Goto :Comprobar_desasociar)


:Buscar_programa

Echo "%~3" | Find "\" >NUL 2>&1

Set /a num+=1
If NOT %Errorlevel% EQU 0 (
For /F "Tokens=*" %%a in ('Dir /B /S "%PROGRAMFILES(X86)%\%~3" 2^>nul') do (
If NOT "%%a" EQU "" (Set "Program=%%a" & Goto :EOF)
)
)

If NOT %Errorlevel% EQU 0 (
For /F "Tokens=*" %%a in ('Dir /B /S "%PROGRAMFILES%\%~3" 2^>nul') do (
If NOT "%%a" EQU "" (Set "Program=%%a" & Goto :EOF)
)
)
Set /a num+=1
If NOT %Errorlevel% EQU 0 (
For /F "Tokens=*" %%a in ('Dir /B /S "%WINDIR%\SYSWOW64\%~3" 2^>nul') do (
If NOT "%%a" EQU "" (Set "Program=%%a" & Goto :EOF)
)
)
Set /a num+=1
Goto :EOF


:ERROR.SWITCH
Echo+
Echo: No existe la opcion "%~1"
Exit /B 1

:ERROR.EXT
Echo+
Echo: No existe la extension "%~2"
Exit /B 1

:ERROR.PATH
Echo: No se ha podido encontrar el programa "%~nx3"
Exit /B 1

:ERROR.DESA
Echo+
Echo: La extension no estaba asociada a ningun programa. "%~2"
Exit /B 1


:AYUDA
Echo+
Echo+
Echo: Assoc7     (By Elektro H@cker)
Echo+
Echo+  Herramienta para asociar tipos de archivos.
Echo+
Echo+ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo+
Echo: Modo de empleo:
Echo+
Echo: %~n0 [Opcion] [Extension] [Ruta de la aplicacion]
Echo+
Echo+
Echo: [OPCIONES]
Echo+
Echo; -a     [Asocia una extension a un programa
Echo: -c     [Crea una extension con su asociacion, Y la asocia a un programa]
Echo: -d     [Desasocia una asociacion existente]
echo+
echo+
Echo: Ejemplo:
Echo+
Echo: %~n0 -a .url Notepad.exe
Echo+
Exit /B 1





REM ASSOC7

:ASSOC7


:Comprobar_asociar
For /F "Tokens=1,2* delims= " %%a in ('Reg query "HKCR\%~2" ^| find "Predeterminado"') do (
If "%%c" EQU "" (Goto :Crear "%~1" "%~2") ELSE (Set "Tipo=%%c" && Goto :Asociar)
)

:Comprobar_desasociar
For /F "Tokens=1,2* delims= " %%a in ('Reg query "HKCR\%~2" ^| find "Predeterminado"') do (
If "%%c" EQU "" (Goto :ERROR.DESA) ELSE (Set "Tipo=%%c" && Goto :Desasociar)
)

:Comprobar_crear
Reg query "HKCR\%~2"  >nul 2>&1
If "%errorlevel%" EQU "1"  (Goto :Crear0 "%~1" "%~2") ELSE (Set "Tipo=%%c" && Goto :Asociar)


:Crear
Reg add "HKCR\%~1" /d "%~2.File" /F  >nul 2>&1
Set "Tipo=%~1.File"
Goto :Asociar


:Crear0
Reg add "HKCR\%~2" /F  >nul 2>&1
Reg add "HKCR\%~2" /d "%~2.File" /F  >nul 2>&1
Set "Tipo=%~2.File"
Goto :Asociar


:Asociar
Echo+
Ftype %Tipo%="%PROGRAM%" "%%1" | MORE
Echo: CORRECTO
Exit /B 0


:Desasociar
Echo+
Ftype %Tipo%="" | MORE
Echo: CORRECTO
Exit /B 0








hax_1000

#1
Que tal !, justo andaba buscando algo asi !, una duda !, como se compila el codigo, en que programa c++ ?  !, o como obtengo el ASSOC7.exe ?

cree una aplicacion tipo karaoke en flash !, y tiene instalador y demas !; pero ocupo asocia el reproductor flash player.exe a la extensión .swf !!.

gracias de antemano !.

-----------------------------------------
o no ya gracias ya le investigue !, y ya pude !. ahora me dedicare a poder hacer el escript que necesito para que se asocie automaticamente cuendo se instala el karaoke

muchas gracias !.

-----------------------------------------------

Ya estuve probando y haciendo la prueva !, resulta que no me deja !, como se le puede hacer !; mira el caso es el siguiente :

Instalo mi aplicacion en C: Archivos de programa / Auto IL & AS

dentro de esa misma carpeta esta la aplicacion "pista interactiva.swf"
y el player "fplayer.exe" esta directo en C:

ejecuto el ASSOC7.exe hay mismo !, ingreso por CMD al ese directorio !, y me meto al ASSOC7 , y pongo ASSOC7 -a .swf "C:\fplayer.exe"
igual cale con ASSOC7 -c .swf "C:\fplayer.exe"

me dice : Acceso denegado en ambos casos !.
ERROR MIESTRAS SE PROCESABA : SHOCKWAVEfLASH.SHOCKWAVEfLASH.

QUE PUEDO HACER EN ESE CASO ?!


Eleкtro

#2
Cita de: hax_1000 en 11 Diciembre 2012, 10:28 AM
me dice : Acceso denegado
ERROR MIESTRAS SE PROCESABA : SHOCKWAVEfLASH.SHOCKWAVEfLASH.

Parece que necesitas privilegios para modificar esa clave del registro


- Puedes modificar manuálmente el propietario a "administrador" y los permisos en las siguientes claves:
HKEY_CLASSES_ROOT\.swf
HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash

(Click derecho en las claves > "Permisos...") (Asegúrate de cambiar propietario/permisos recursivamente, es decir, asegúrate que afecte a todas las subclaves)


- O puedes modificar los permisos con REGINI automáticamente (PERO NO PUEDES MODIFICAR EL PROPIETARIO):


Código (dos) [Seleccionar]
(
Echo HKEY_CLASSES_ROOT\.swf                                      [1 7 17]
Echo HKEY_CLASSES_ROOT\.swf\defaulticon                          [1 7 17]
Echo HKEY_CLASSES_ROOT\.swf\OpenWithList                         [1 7 17]
Echo HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash             [1 7 17]
Echo HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash\CLSID       [1 7 17]
Echo HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash\CurVer      [1 7 17]
Echo HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash\defaulticon [1 7 17]
Echo HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash\Shell       [1 7 17]
)>"%TEMP%\Flash.ini"
Regini.exe "%TEMP%\Flash.ini"



- O puedes modificar el propietario y los permisos usando la aplicación SETACL (Búscala en Google)

Código (dos) [Seleccionar]
REM Este comando modifica el propietario.
setacl.exe -on "HKEY_CLASSES_ROOT\.swf" -ot reg -ownr "n:%USERNAME%" -rec yes -actn setowner
setacl.exe -on "HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash" -ot reg -ownr "n:%USERNAME%" -rec yes -actn setowner

REM Este comando modifica los permisos de la clave.
setacl.exe -on "HKEY_CLASSES_ROOT\.swf" -ot reg -ace "n:%USERNAME%;p:full" -rec yes -actn ace
setacl.exe -on "HKEY_CLASSES_ROOT\ShockwaveFlash.ShockwaveFlash" -ot reg -ace "n:%USERNAME%;p:full" -rec yes -actn ace



Cierro el tema, si tienes una duda debes crear un nuevo post, no revivir uno antiguo  :P.

Saludos