Como crear una Condicion y su ejecucion en un BAT

Iniciado por MaX2, 9 Diciembre 2013, 09:53 AM

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

MaX2

Hola, tengo varios botones puestos en una aplicación, cada botón es para ejecutar por ejemplo el Word, porque dependiendo del sistema operativo o la versión del word, el ejecutable se encuentran en rutas diferente.

C:\Archivos de programa\Microsoft Office97\Office\winword.exe
C:\Archivos de programa\Microsoft Office\Office\winword.exe
C:\Program Files (x86)\Microsoft Office\Office15\winword.exe

Me gustaría dejar solo un botón, para que ejecute un archivo BAT, que código tendría que poner en el BAT, para que ejecute el Word dependiendo de la versión que se tenga instalada ?


Gracias

Eleкtro

#1
Hola

¿Que tiene que ver una GUI con Batch?, ¿Es que quizás estás usando WinBatch o derivados?, en caso contrario, ¿Si la GUI la has creado con un lenguaje distinto a Batch, porque quieres realizar la tarea usando Batch? eso sería un punto muy negativo.

Lo que debes hacer (usando el mismo lenguaje con el que creaste los botones) es obtener el valor de la subclave de registro de la configuración de Office donde se especifica la ruta de ejecución del proceso...

...San Google dice que la subclave para Office97 (Office, no Word) es esta:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\8.0\BinDirPath
(adentro puedes localizar la ruta del Word)

Y también dice que la subclave para Word 2007 es esta:
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Word\InstallRoot

Puedes Googlear para obtener las demás localizaciones del proceso Word.exe de las distintas versiones de Office, y así simplificarás la tarea.

Saludos!








MaX2

Gracias EleKtro H@cker, como te he comentado en el otro post, me esperaba recibir una notificación de nuevas respuestas en el correo, y no he recibido ninguna.

Creo que no me he explicado bien, la verdad es que estoy un poco perdido con el tema de los comandos que se pueden utilizar en un archivo.bat.

Tengo un enlace directo puesto en una aplicación, donde le he puesto la ruta donde se encuentra el procesador Word, otra para ejecutar el Excel.

Si esa aplicación se ejecuta en un ordenador que tiene instalado word 97, le digo que esta en esta ruta:
C:\Archivos de programa\Microsoft Office97\Office\winword.exe

Si ese ordenador en lugar de tener el procesador de texto Word 97, tiene el 2000, la ruta o carpeta donde esta instalado es diferente, y al no encontrar ese ejecutable me muestra un error.

No se si se puede hacer que en lugar de poner en ese enlace que ejecute el winword.exe, que ejecute un archivo.bat y dentro de este archivo que contenga los comandos necesarios para que busque si en la carpeta C:\Archivos de programa\Microsoft Office97\Office\ se encuentra el ejecutable winword.exe, si no esta, que busque en la siguiente carpeta, y si esta que lo ejecute.

De esta forma quitaría todos los iconos que tengo puestos, y solo dejaría uno; no se si entiendes mi idea, y si eso se pueden hacer.


Salu2.





Eleкtro

#3
Te entendí desde el primer momento, quieres localizar la ubicación de la aplicación MSWord indiferéntemente de la versión de Office que haya instalado en el PC.
(Lo que no entiendo es que digas que tienes un programa con botones... eso entonces no es Batch y Batch no seria necesario usarlo, pero bueno, ya puestos no tiene importancia.)

Pero no es todo hacer click y listo, te he explicado la manera de localizar la ubicación del word.exe mediante el registro:

CitarHKLM\SOFTWARE\Microsoft\Office\8.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\8.5\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\9.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\10.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\11.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\12.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\13.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\14.0\Word\InstallRoot\Path
HKLM\SOFTWARE\Microsoft\Office\15.0\Word\InstallRoot\Path

Al parecer la subclave de registro es idéntica desde la versión 8.0 (al menos) hasta la 15.0, es decir, desde el Office97 hasta el Office2013, eso he leido por ahi, no puedo verificarlo.

Solo tienes que iterar esa lista de subclaves con el comando REG QUERY para comprobar si el valor existe en alguna de ellas y capturar dicho valor con el comando FOR /F, y listo, ya habrás conseguido la ruta del executable del Word sin preocuparse de que versión haya instalada en el PC, no lo vamos a hacer todo por ti.

EDITO:
Cita de: MaX2 en 11 Diciembre 2013, 21:09 PMSi esa aplicación se ejecuta en un ordenador que tiene instalado word 97, le digo que esta en esta ruta:
XXXXXXXXXXXXXXXXXXXXXXXX

Es una mala idea. La ruta de instalación de Office no es fija, es personalizable a la libre elección del usuario, Office puede ser perféctamente instalado en por ejemplo: "C:\Mis Documentos\Office"
Por eso mismo necesitas comprobarlo en el registro...

Saludos!








MaX2

#4
La verdad es que es que la cosa esta un poco liado para mí que no estoy muy puesto, creo entender lo que dices, que hay que buscar en el registro donde está la carpeta donde fue instalado, y una vez conseguida ya se puede ejecutar cualquier versión que tengamos instalada, lo malo es que no tengo ni idea de cómo hacerlo.

Sé que dices que me busque la vida que no la vas hacer por mí, pero por ese motivo os pedí ayuda a los que sabéis como se puede hacer, y pedí ayuda como última solución porque después de ver algunas páginas donde se habla sobre los comandos de los archivo bat, seguía sin conseguir hacer nada; y ahora me hablas del comando REG QUERY, con decirte que ahora veo que hay muchas más que ver porque ha sido ahora cuando he visto hablar de él.

Por eso, al no saber muy bien cómo trabaja y que comandos hay para crear un archivo BAT, me fui a copiar la ruta donde se encontraba cada una de las aplicaciones, de ahí que tenga varios iconos puestos, aunque sé que se puede instalar en diferentes carpetas, están instalados en la ruta que viene por defecto.

Al hablar de una aplicación, es un ejecutable que he creado mediante una aplicación donde tengo puesto unos botones/iconos/imagen que llevan la ruta donde está el Word para que se puedan ejecutar.

Mi idea era crear un archivo bat, y luego lo convierto a exe, para que al pulsar uno de esos botones se ejecutase ese bat compilado y abriese el Word.

Y dentro de ese bat llevase el código o las instrucciones para que dependiendo el Word que se tenga instalado se ejecutase.

Es posible que diga una burrada, pero había pensado en algún tipo de código como....
Busca en esta ruta:
C:\Archivos de programa\Microsoft Office97\Office\winword.exe
Si esta el archivo winword.exe lo ejecutas.
Si no esta en esta ruta que busque en la siguiente.

Como digo puede que esto sea una burrada, pero al no saber, es mas o menos el tipo de códigos que estaba intentando buscar para que hiciese eso.

A ver si puedo ahora y en te subo un pequeño de la aplicación que te comento.


Editado

Te dejo un link para que veas el ejemplo de la aplicacion, cuando pases el raton encima de los iconos se puede ver la ruta que tengo puesta para que se ejecute el word.

http://ul.to/nmd3n6f2


Salu2.

Eleкtro

#5
Cita de: MaX2 en 12 Diciembre 2013, 16:40 PM
Sé que dices que me busque la vida que no la vas hacer por mí, pero por ese motivo os pedí ayuda a los que sabéis como se puede hacer

Interpretaste mal mis palabras, en ningún momento pretendí decirte que te busques la vida por ti solo, aquí estamos para ayudar, pero no para hacer el trabajo por los demás.

Lo que ocurre es que si alguien no sabe hacer "X" cosa, es preferible darle las herramientas y explicarle como hacerlo, que dárselo todo echo para que no aprenda nada,
si hubieras mostrado un código echo por ti, donde demostrases que lo has intentado hacer por ti mismo, habría sido mejor recibido, ya que la gente suele pedir y pedir todo echo sin mostrar una sola línea de código ni haber buscado en Google, y eso es algo que a la larga cansa mucho de ver siempre lo mismo.

-> http://ss64.com/nt/reg.html
-> http://ss64.com/nt/for_f.html

CitarEs posible que diga una burrada, pero había pensado en algún tipo de código como....
Busca en esta ruta:
C:\Archivos de programa\Microsoft Office97\Office\winword.exe
Si esta el archivo winword.exe lo ejecutas.
Si no esta en esta ruta que busque en la siguiente.

Sería una forma de hacerlo pero si quieres mi opinión no deberías hacerlo por dos motivos: 1. Te he comentado cual es la manera eficiente de hacerlo (Regedit), 2. La ruta de instalación de Office no es fija.




Esto sería más o menos lo que debes hacer, hay ciertas cosas que modificar porque yo no dispongo del Office para verificar la clave o para verificar si la ruta en el registro está escrita con comillas dobles:

@Echo OFF & Setlocal enabledelayedexpansion

Set "WordPath="

Set "MSOfficeIDS=8.0 8.5 9.0 10.0 11.0 12.0 13.0 14.0 15.0"
Set "REGRoot=HKLM"
Set "REGKey=SOFTWARE\Microsoft\Office\{MSOfficeID}\Word\InstallRoot\Path"

REM Esta variable debes rellenarla tú corréctamente,
REM con el nombre de la subclave que pretendes obtener.
REM Déjalo tal como está (con un espacio en blanco) en caso de que,
REM el nombre de la subclave que contiene el directorio del Word.exe fuese "(Predeterminado)".
Set "REGValue= "

For %%# in (%MSOfficeIDS%) Do (
REG.exe Query "%REGRoot%\!REGKey:{MSOfficeID}=%%#!" /f "%REGValue%" 1>NUL 2>&1 && (
For /F "Tokens=1 Delims=.exe" %%@ in (
'REG.exe Query "%REGRoot%\!REGKey:{MSOfficeID}=%%#!" /f "%REGValue%" ^| Find /I ".exe"'
) Do (
Set "WordPath=%%@.exe"
Goto :RunWord
)
)
)
Exit /B 1

:RunWord
Start /B "Run Word" "%WordPath%" "Aquí pones la ruta de un Archivo.doc"
Exit /B 0


Saludos








MaX2

Gracias EleKtro H@cker, te comprendo, pero en mi coso no estoy muy puesto en estos temas y me pierdo cuando empiezo a leer el código, y en ingles mucho más porque no tengo ni idea, he visto algunas páginas que no las he leído por ese motivo, otras que están en español, y no pongo por si meto la paga al poner spam, aunque más o menos dicen lo mismo, incluso aquí he visto un artículo que habla sobre esto, pero no sé por dónde meterle mano.
http://www.elhacker.net/ProgramacionBat.html

y no me parece que sea igual que el código que has puesto tú, y que te agradezco; ni mucho menos había sacado yo ese código.

El Word está instalado en la carpeta que viene predeterminada, lo que hay instalado en los ordenadores de los puestos de trabajo no lo instalamos nosotros, y quien se encarga de eso lo deja tal cual se hace la instalación del office.

Voy a probar con el código que has puesto, lo que pasa que ahora solo puedo probarlo en un ordenador, con un sistema operativo y solo una versión de Word, si me aclaro y consigo que funcione a ver si lo puedo compilar en un exe y enviar por correo algún compañero que pueda probarlo en el ordenador del curro.

Lo que no tengo muy claro es lo que dices en la última línea "Aquí pones la ruta de un Archivo.doc", no tiene que abrir ningún documento, solo pulsar en el icono y que se ejecute el Word, él ya abre uno en blanco.

Salu2.

Eleкtro

Cita de: MaX2 en 13 Diciembre 2013, 09:13 AM
Lo que no tengo muy claro es lo que dices en la última línea "Aquí pones la ruta de un Archivo.doc", no tiene que abrir ningún documento, solo pulsar en el icono y que se ejecute el Word, él ya abre uno en blanco.

Ok lo puse por si acaso, entonces la orden quesaría así:
Start /B "Run Word" "%WordPath%"

PD: He leido tu mp, aunque yo poco más puedo ayudar ya que no puedo comprobar la clave de registro, pero solo tienes que investigar por ti mismo esos pequeños detalles que falten... tu dispones de varios PC's con word instalado y alli puedes mirar las claves.

Saludos!








MaX2

#8
Te iba ha decir lo que he probado, pero ya me respondiste, tambien estuve probando a quitar esa parte donde se pone un documento, y tambien he probado a poner un documento pero no hace nada.

Muestra por un momento la ventana negra y se cierrea sin hacer nada, he intentado poner un pause para ver si muestra algun mensaje pero tampoco consigo que se detenga.

Creo que puede estar en la ruta del registro, lo que me muestra esa clave es esto que ves en la imagen:



de todas formas he buscado a ver si veo por alguna de las claves el texto Word\InstallRoot\Path y no lo he visto.


Salu2.




Voy a probar con esta otra clave a ver si funciona



Pero ahora me tengo que marchar, a ver si luego pruebo y te cuento.

pero creo que aqui tendria que cambira algo, no?
Set "REGRoot=HKLM"

lo correcto seria Set "REGRoot=HKCU"  ? lo pregunto por si tampoco me funcionase y fuese porque lo este escribiendo mal.


Salu2.




algo estoy haciendo mal, he cambiado esta parte

Set "MSOfficeIDS=8.0 8.5 9.0 10.0 11.0 12.0 13.0 14.0 15.0"
Set "REGRoot=HKCU"
Set "REGKey=SOFTWARE\Microsoft\Office\{MSOfficeID}\Word\Options\PROGRAMDIR"

y no sigue iniciando arrancando el word.


Salu2.

Eleкtro

#9
@MaX2

El doble post no está permitido y mucho menos el TRIPLE, usa el botón MODIFICAR.






El código que te puse espera una ruta absoluta del archivo como por ejemploe esta:
C:\Directorio\word.exe

No espera un directorio como este:
C:\Directorio\

Las modificaciones que le has hecho son correctas, No se si las modificaciones que has echo son del todo correctas porque en la segunda imagen veo otra carpeta que pone Word:
HKCU\SOFTWARE\Microsoft\Word
Quizás sea esa la clave que contiene la ruta del word, compruebalo...

De todas formas, para la modificación que has echo basándote en las imágenes que has puesto, solo tienes que modificar esta parte para adaptarlo a la salida del valor de la subclave, es decir, para capturar una ruta de directorio y no una ruta del archivo:
CitarFor /F "Tokens=1 Delims=.exe"

For /F "Tokens=2,* Delims= " %%a in (
'REG.exe Query "%REGRoot%\!REGKey:{MSOfficeID}=%%#!" /f "%REGValue%" ^| Find /I "REG_SZ"'
) Do (
       Set "WordPath=%%b"
       REM Para comprobar si está bien...
       Echo WordPath=!WordPath!
       Echo WordPath + WordFilename = !WordPath!Word.exe
       Pause
Goto :RunWord
)


Saludos