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:
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:
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:
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.
Asumiendo que solo haya un archivo con nombre "ut3.exe" en el PC y sea en el disco principal, puedes hacer esto con seguridad:
@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
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:
@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...
(http://k46.kn3.net/3/A/0/D/5/1/BB8.png)
No pasa de ahi... :silbar:
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.
@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
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í:
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!
(http://k46.kn3.net/F/7/D/C/6/3/83A.png)
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:
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