[BATCH] Buscar y ejecutar el archivo encontrado .bat

Iniciado por rockhevy1000, 19 Octubre 2015, 01:07 AM

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

rockhevy1000

Buenas tardes amigos del foro, anteriormente me han servido muchos tutoriales de esta pagina y realmente no soy un usuario de andar molestando preguntando sin antes buscar primero, es por eso que este es mi primer tema. Les comento mi situación.

Tengo un juego (Unreal Tournament 3) que gracias a los tutos de la red lo puedo ejecutar en modo de pantalla split para 2 o + jugadores. El problema viene que para cambiar los modos de juego (1 juagador o 2+ jugadores) hay que cambiar un archivo en la carpeta del juego. Es decir, si quiero jugar yo solo tengo que copiar el archivo "ejem1.ini" en la carpeta del juego, renombrarlo a "ejem.ini" y después ejecutar el juego.  Si quiero jugarlo con un amigo, tengo borrar el primero, después copiar el "ejem2.ini" a la carpeta y renombrarlo por "ejem.ini". Despues de todo esto, ahoar si puedo ejecutar el juego.

La primera parte ya la resolvi con el siguiente codigo.

1 jugador:
Código (dos) [Seleccionar]
IF ERRORLEVEL 2 GOTO ERROR

copy "D:\Mis Programas\Varios\Unreal3\1player\file.ini" "D:\Mis Programas\Varios\Unreal3\destino"

exit

:ERROR
pause


2+ jugadores:

Código (dos) [Seleccionar]
IF ERRORLEVEL 2 GOTO ERROR

copy "D:\Mis Programas\Varios\Unreal3\2player\file.ini" "D:\Mis Programas\Varios\Unreal3\destino"

exit

:ERROR
pause


Ahora la pregunta es si puedo automatizar el proceso para que despues de cambiar el archivo ejecute el juego (ut3.exe)

Se que con el comando start lo puedo hacer poniendolo asi:

Código (dos) [Seleccionar]
start "file.ini" "D:\Mis Programas\Varios\Unreal3\destino\file.ini"

Pero la pregunta es si hay alguna forma de que el batch me busque en el equipo el programa, en este caso ut3.exe y que cuando lo encuentre, lo ejecute.

Esto es por si despues cambio la carpeta de instalación o le paso el batch a un amigo y no tenga que estar cambiando las rutas el mismo.

Resumiendo, que al ejecutar el archivo 1 player.bat copie el archivo 1player.ini en la carpeta de configuracion, y despues, busque el ejecutable (en el equipo) y lo ejecute. Y al ejecutar el archivo 2 player.bat, copie 2player.ini, busque el ejecutable y lo ejecute.

Espero haberme explicado bien. Gracias por sus respuestas.

*Los codigos que puse son ejemplos, me gusta trabajar en carpetas separadas a lo que voy a hacer para no confundirme. Una vez que logre lo que quiero, cambio los archivos por su respectivo.

Eleкtro

#1
Asumiendo que solo haya un archivo con nombre "ut3.exe" en el PC y sea en el disco principal, puedes hacer esto con seguridad:

Código (dos) [Seleccionar]
@Echo OFF

PUSHD "%HomeDrive%"
For /R %%# In ("*ut3.exe") Do (
Start /Wait "Unreal Tournament 3" "%%~f#"
)
POPD

Pause&Exit /B 0


Pero ten en cuenta que Batch es un lenguaje limitado, es lento incluso para realizar operaciones de búsqueda de archivos o iteraciones en el sistema de archivos.

PD: ¿Todavía existen servers públicos para el UT3? xD.

Saludos








rockhevy1000

#2
Cita de: Eleкtro en 21 Octubre 2015, 16:17 PM
Asumiendo que solo haya un archivo con nombre "ut3.exe" en el PC y sea en el disco principal, puedes hacer esto con seguridad:

Código (dos) [Seleccionar]
@Echo OFF

PUSHD "%HomeDrive%"
For /R %%# In ("*ut3.exe") Do (
Start /Wait "Unreal Tournament 3" "%%~f#"
)
POPD

Pause&Exit /B 0


Pero ten en cuenta que Batch es un lenguaje limitado, es lento incluso para realizar operaciones de búsqueda de archivos o iteraciones en el sistema de archivos.

PD: ¿Todavía existen servers públicos para el UT3? xD.

Saludos

Saludos! y gracias por responder...

Voy a probar tu batch para ver como se me da, igual en el remoto caso de que tenga dos o mas archivos llamados "ut3.exe" es posible especificar en que carpeta (no se, por ejemplo %ProgramFiles(x86)%? en vez de "%HomeDrive%"?

Realmente no se si existan servers publicos, como lo utilizo para jugar por Hamachi o por plantalla split, no me he dado a la tarea de buscarlos. En todo caso, jugarlo con los amigos es por nostalgia, la crisis de los 30...  :P

EDITO: Ya hice el bat pero no me funciono, te dejo la captura de pantalla...



No pasa de ahi...  :silbar:

Eleкtro

#3
Cita de: rockhevy1000 en 23 Octubre 2015, 06:49 AMEDITO: Ya hice el bat pero no me funciono, te dejo la captura de pantalla...

El código lo escribí al vuelo sin testearlo, lo siento, me faltó añadir el backslash a la ruta:
PUSHD "%HomeDrive%\"

Con esa modificación ya funciona.




Cita de: rockhevy1000 en 23 Octubre 2015, 06:49 AMen el remoto caso de que tenga dos o mas archivos llamados "ut3.exe" es posible especificar en que carpeta (no se, por ejemplo %ProgramFiles(x86)%? en vez de "%HomeDrive%"?

Si, simplemente modifica esa ruta. El comando PUSHD lo que hace es modificar el directorio de trabajo, y entonces el For se procesa en el directorio de trabajo actual (que hemos modificado previamente) para buscar el archivo de forma recursiva dentro de ese directorio.

Código (dos) [Seleccionar]
@Echo OFF

If Exist "%ProgramFiles(x86)%" (
PUSHD "%ProgramFiles(x86)%"
) Else (
PUSHD "%ProgramFiles%"
)

For /R %%# In ("*ut3.exe") Do (
Start /Wait "Unreal Tournament 3" "%%~f#"
)

POPD

Pause&Exit /B 0


Saludos








rockhevy1000

Cita de: Eleкtro en 23 Octubre 2015, 09:55 AM

Gracias man! Ya quedo el código, justo como lo buscaba. Solo una pregunta, el hecho de que pongas If Exist "%ProgramFiles(x86)%" Else "%ProgramFiles%" es para que busque en Archivos de Programa (x86) si está en el equipo, si no, en Archivos de Programa, verdad?

Al fin quedo así:

Código (dos) [Seleccionar]
Echo Off
color cf
title Launcher UT3

copy "D:\Mis Programas\Juegos\Unreal Tournament 3\Pantalla Split\1 o 2 jugadores\1player\UTGame.ini" "%USERPROFILE%\Documents\My Games\Unreal Tournament 3\UTGame\Config"

cls

If Exist "%ProgramFiles(x86)%" (
PUSHD "%ProgramFiles(x86)%"
) Else (
PUSHD "%ProgramFiles%"
)

cls

mode con cols=47 lines=19
Echo.
Echo.
Echo.          z       z zzzzzzzzz   zzz
Echo.          z       z     z      z   z
Echo.          z       z     z     z    z
Echo.          z       z     z          z
Echo.          z       z     z         zz
Echo.          z       z     z       zzz
Echo.          z       z     z          z
Echo.          z       z     z           z
Echo.          z       z     z           z
Echo.          z       z     z     z     z
Echo.           z     z      z     zz   z
Echo.            zzzzz       z       zzz
Echo.                                         
Echo.                                         
Echo.    .: Iniciando Partida Para 1 Jugador :.

For /R %%# In ("*ut3.exe") Do (
Start /Wait "Unreal Tournament 3" "%%~f#"
)

cls

POPD

Echo.
Echo.
Echo.          z       z zzzzzzzzz   zzz
Echo.          z       z     z      z   z
Echo.          z       z     z     z    z
Echo.          z       z     z          z
Echo.          z       z     z         zz
Echo.          z       z     z       zzz
Echo.          z       z     z          z
Echo.          z       z     z           z
Echo.          z       z     z           z
Echo.          z       z     z     z     z
Echo.           z     z      z     zz   z
Echo.            zzzzz       z       zzz
Echo.                                         
Echo.                                         
Echo.    .: Terminando Partida Para 1 Jugador :.

ping localhost -n 3 >nul

Exit


Mas que nada paja, pero el resultado me gusto. Saludos!


Eleкtro

Cita de: rockhevy1000 en 24 Octubre 2015, 21:46 PMSolo una pregunta, el hecho de que pongas If Exist "%ProgramFiles(x86)%" Else "%ProgramFiles%" es para que busque en Archivos de Programa (x86) si está en el equipo, si no, en Archivos de Programa, verdad?

Exacto. Por lo que dijiste de que le podías pasar el script a otras personas, en el caso de que alguna persona no tenga un S.O. de 64 Bits.




Cita de: rockhevy1000 en 24 Octubre 2015, 21:46 PMAl fin quedo así:

Genial, pero deberías intentar no repetir código:

Código (dos) [Seleccionar]
Echo Off & Color cf & Title Launcher UT3

Copy "D:\Mis Programas\Juegos\Unreal Tournament 3\Pantalla Split\1 o 2 jugadores\1player\UTGame.ini" "%USERPROFILE%\Documents\My Games\Unreal Tournament 3\UTGame\Config"
Cls

If Exist "%ProgramFiles(x86)%" (
PUSHD "%ProgramFiles(x86)%"
) Else (
PUSHD "%ProgramFiles%"
)

mode con cols=47 lines=19
Call :ASCII_ART                               
Echo.    .: Iniciando Partida Para 1 Jugador :.

For /R %%# In ("*ut3.exe") Do (
Start /Wait "Unreal Tournament 3" "%%~f#"
)

POPD
Call :ASCII_ART                                 
Echo.    .: Terminando Partida Para 1 Jugador :.
(ping localhost -n 3)1>Nul
Exit /B 0

:ASCII_ART
Echo.
Echo.
Echo.          z       z zzzzzzzzz   zzz
Echo.          z       z     z      z   z
Echo.          z       z     z     z    z
Echo.          z       z     z          z
Echo.          z       z     z         zz
Echo.          z       z     z       zzz
Echo.          z       z     z          z
Echo.          z       z     z           z
Echo.          z       z     z           z
Echo.          z       z     z     z     z
Echo.           z     z      z     zz   z
Echo.            zzzzz       z       zzz
Echo.                                         
Echo.         
Goto :EOF


Saludos