asociación de archivos

Iniciado por polski-levo, 15 Junio 2015, 12:02 PM

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

polski-levo

Buenos días mi primera pregunta en este maravilloso foro del que he aprendido mucho, perdón si no meto el tema donde toca o si no se manejar el formato de código:

Estoy intentando elaborar un script bat para asociar la extensión .jar con el programa de java, para ello estoy intentando:

set direccionJava=C:\Program Files\Java\jre1.8.0_40\bin\javaw.exe
set direccionJava86=C:\Program Files(x86)\Java\jre1.8.0_40\bin\javaw.exe
assoc .jar=JARFile
if "%ProgramFiles(x86)%" == "" (
ftype JARFile="%direccionJava86%"
) else (
ftype JARFile="%direccionJava%" -jar "%1" "%*"
)

pero nada, no lo consigo por mas vueltas que doy. Mi sistema es win7, el bat consigo que se habra antes como administrador con:
NET FILE 1>NUL 2>NUL
setlocal & pushd .


Eleкtro

Cita de: polski-levo en 15 Junio 2015, 12:02 PMno lo consigo por mas vueltas que doy.

1. Encierra las variables
Código (dos) [Seleccionar]
set "direccionJava=C:\Program Files\Java\jre1.8.0_40\bin\javaw.exe"
set "direccionJava86=C:\Program Files(x86)\Java\jre1.8.0_40\bin\javaw.exe"


2. Escapa los caracteres reservados por el lenguaje (%)
Código (dos) [Seleccionar]
ftype JARFile="%direccionJava%" -jar "%%1" "%%*"

Saludos!








polski-levo

Desde luego he quitado errores, pero aún no consigo el efecto, busco poder abrir el archivo como abrir con, seleccionar un programa y convertirlo en el predeterminado, estoy dudando si se puede lo que quiero ¿se puede o esto es diferete y hay que acudir al registro?

Otra cosa ¿Por qué debes poner dos %% aquí?
ftype JARFile="%direccionJava%" -jar "%%1" "%%*"

Eleкtro

#3
Cita de: polski-levo en 15 Junio 2015, 20:58 PM¿Por qué debes poner dos %% aquí?
ftype JARFile="%direccionJava%" -jar "%%1" "%%*"

Lo he mencionado antes, para escapar el caracter "%", ya que es un símbolo reservado por el lenguaje ...para definir variables, por ende, obviamente si escribes el símbolo "%" tendrá un efecto muy distinto al que le querías dar, ya que tú pretendes escribir/interpretar dicho símbolo, no usarlo cómo si de una variable se tratase.




Cita de: polski-levo en 15 Junio 2015, 20:58 PMbusco poder abrir el archivo como abrir con, seleccionar un programa y convertirlo en el predeterminado

Con los arreglos que mencione, aplicados en el código que mostraste, estás creando una asociación por defecto para los archivos con extensión ".jar", para que se ejecuten con la aplicación "javaw.exe" pasándole los argumentos: " -jar "C:\Ruta de archivo.jar" "Argumentos adicionales" ", por ende, al clickar sobre un archivo de tipo ".jar", éste se intentará abrir con la aplicación de Java.

Todo ese proceso que haces en Batch se resume en crear una clave de referencia en la clave de registro "HKCR\.jar" con el nombre que le diste (JARFile), y en esa clave referenciada (HKCR\JARFile) se crea el comando por defecto "Open" (HKCR\JARFile\Shell\Open\Command) con el valor que le diste.

En resumen, supuestamente ya has hecho la aplicación javaw.exe la predeterminada para archivos .jar.

Si no es eso lo que pretendes, intenta explicarlo con más detalles.

Saludos!








polski-levo

Lo primero muchas gracias por la ayuda. Aunque pensaba que resultaría más sencillo veo que voy aprender tela y creo que el tema resulta muy útil e interesante para el foro.
Sigo sin conseguirlo  :-(
OK, me explico, mi objetivo último es abrir con un doble click los programas que voy practicando de java (esta tarea la quiero automatizar ya que también hacemos prácticas con el formato de compresión y se "desvincula" jar de java).

En relación a lo que ya hemos visto creo que no hay problema, lo que es la asociación queda bien establecida, lo compruebo con esto:
ftype 2>&1 >tmp.txt
Pero al hacer doble click nada, no se abren los programas  :huh:

He observado que al tener también un javaw en el directorio jdk (que es al que recurre por defecto el pseudo path de java C:\ProgramData\Oracle\Java\javapath), esto por raro que parezca me ha dado algún error, creo  :P
He probado a llamar al javaw del jdk pero tampoco funciona.

También puedo estar teniendo problemas al inicio:
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
setlocal & pushd .
goto inicio
::cmd /k


Y en :inicio lo que ya habíamos comentado

al final incluyo un:
del "%temp%\OEgetPrivileges.vbs"

Si hay problemas con esto ¿cómo puedo obtener los "permisos"?

Ya ando muy liado :P

asdexiva

creo que tienes que ejecutar como administrador el bat los operadores estos >,>> en windows 7 necesita que los ejecutes como administrador

polski-levo

Cita de: asdexiva en 17 Junio 2015, 20:40 PM
creo que tienes que ejecutar como administrador el bat los operadores estos >,>> en windows 7 necesita que los ejecutes como administrador

Lo de los "permisos" creo que va más en función de comandos, no operadores, de todas formas en el sentido de obtener los permisos no estoy teniendo problemas, más bien puedo estar teniendo problemas con cómo se obtienen los permisos, pero obtenerse se obtienen, comprueba:

@echo off
net file 1>nul 2>nul
if '%errorlevel%' == '0' ( goto gotprivileges ) else ( goto getprivileges )
:getprivileges
echo getprivileges
echo presiona espacio
pause>nul
if '%1'=='ELEV' (shift & goto gotprivileges)
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /b
:gotprivileges
echo gotprivileges
echo presiona espacio
pause>nul
setlocal & pushd .
goto inicio
cmd /k

:inicio
set "direccionJava=C:\Program Files\Java\jre1.8.0_45\bin\javaw.exe"
set "direccionJava86=C:\Program Files(x86)\Java\jre1.8.0_45\bin\javaw.exe"
echo direccionJava: %direccionJava%
echo direccionJava86: %direccionJava86%
assoc .jar=JARFile
if "%ProgramFiles(x86)%" == "" (
ftype JARFile="%direccionJava%" -jar "%%1" "%%*"
echo utilizando sin86
) else (
ftype JARFile="%direccionJava86%" -jar "%%1" "%%*"
echo utilizando 86
)
echo presiona espacio para salir
pause>nul
exit

polski-levo

Me comentan que para vista, win7 etc en realidad se hace modificando directamente el registro:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar

Todo lo que habia progresado para nada  :o