Joder, si es que soy idiota
La solución fácil es meter el .bat dentro del directorio del juego (durante la instalación) y hacer todo desde ahí.
La ruta donde se ejecuta el bat, sea cual sea esta, sería:
%~d0%~p0Para meterme en el directorio
Settings (dentro del directorio del juego), donde está el
FourDO.settings sólo tendría que incluir en el .bat:
cd %~d0%~p0Settingssería como hacer, por ejemplo, suponiendo que esa fuera la ruta:
cd c:\Juegos\4DO\SettingsSobre lo que dices
@Esog Enaug, si, lo pillo, lo malo es que sigo teniéndole que indicar a mano "la unidad", y la máquina donde la vaya instalar puede tener sabe dios cuantas unidades, por ejemplo la máquina en la que estoy ahora (el sobremesa), tiene 3 unidades de disco HDD con un par de particiones cada una, más el SSD.
Lo más fácil sería lo de arriba,
%~d0%~p0 te da la ruta desde donde estás ejecutando el fichero batch (.bat)
Por tanto la ruta de la bios con el nombre de la bios sería algo como:
<BiosRomFile>%~d0%~p0Bios\3do_bios_fz10.rom</BiosRomFile>Donde
%~d0%~p0Bios\ equivaldría para el .bat a algo como
C:\Juegos\4DO_Emulador\Super Street Fighter II Turbo\Bios\3do_bios_fz10.rom (suponiendo que voy a emular el mencionado Super Street Fighter II Turbo de 3DO)
Y donde
3do_bios_fz10.rom es el nombre de la bios
Ahora me he encontrado con otro problema, el fichero en cuestión tiene el siguiente contenido con la configuración del emulador:
<?xml version="1.0" encoding="utf-8"?>
<Settings>
<GameRomLastDirectory></GameRomLastDirectory>
<AudioVolume>1</AudioVolume>
<WindowImageSmoothing>True</WindowImageSmoothing>
<AudioBufferMilliseconds>100</AudioBufferMilliseconds>
<GameRomSourceType>0</GameRomSourceType>
<AutoLoadLastSave>True</AutoLoadLastSave>
<VoidAreaBorder>False</VoidAreaBorder>
<WindowScalingAlgorithm>1</WindowScalingAlgorithm>
<VoidAreaPattern>0</VoidAreaPattern>
<LastPauseStatus>False</LastPauseStatus>
<InactiveIgnoreKeyboard>True</InactiveIgnoreKeyboard>
<GameRomDrive>
</GameRomDrive>
<WindowSnapSize>True</WindowSnapSize>
<WindowWidth>656</WindowWidth>
<SelectedOptionTab>0</SelectedOptionTab>
<WindowPreseveRatio>True</WindowPreseveRatio>
<AutoOpenGameFile>False</AutoOpenGameFile>
<GameRomFile>SuperStreetFighterIITurbo.iso</GameRomFile>
<SaveStateSlot>0</SaveStateSlot>
<WindowFullScreenDevice>0</WindowFullScreenDevice>
<BiosRomFile></BiosRomFile>
<WindowAutoCrop>False</WindowAutoCrop>
<RenderHighResolution>False</RenderHighResolution>
<WindowScale>False</WindowScale>
<CpuClockHertz>12500000</CpuClockHertz>
<BiosRom2File>
</BiosRom2File>
<WindowHeight>565</WindowHeight>
<Language>
</Language>
<WindowFullScreen>True</WindowFullScreen>
<InactivePauseEmulation>True</InactivePauseEmulation>
</Settings>
Lo que me interesa cambiar es
<BiosRomFile></BiosRomFile>, la ruta va en el medio de esas 2 etiquetas, algo así:
<BiosRomFile>ruta_de_la_Bios</BiosRomFile>Para poder encontrar el lugar donde insertar la cadena, lo que se me ocurre es editar el fichero de texto y colocar en esa línea
<BiosRomFile>RutaBIOS</BiosRomFile>Así puedo buscar el string
RutaBIOS y sustituirlo por la ruta del juego, con algo como:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type FourDO.settings') do (
set linea=%%x
set linea=!linea:RutaBIOS=%~d0%~p0Bios\3do_bios_fz10.rom!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof
O más fácil, eliminar las líneas
<BiosRomFile></BiosRomFile> y </Settings>
Y simplemente usar:
@echo off
cd %~d0%~p0Settings
echo <BiosRomFile>%~d0%~p0Bios\3do_bios_fz10.rom</BiosRomFile> >> FourDO.settings
echo </Settings> >> FourDO.settings
Así se añaden esas dos líneas (previamente borradas) al final del fichero quedando perfecto, en teoría
El problema es que el intérprete de comandos de Windows (y el de MS-Dos supongo que haría o mismo), no escribe strings que contengan caracteres especiales como
<,
> ó
\Se solventa usando comillas (
"), pero... entonces surje otro problema, y es que las comillas se añaden también al fichero .bat con cualquiera de las 2 formas de editar el fichero.
@echo off
cd %~d0%~p0Settings
echo
"<BiosRomFile>%~d0%~p0Bios\3do_bios_fz10.rom</BiosRomFile>" >> FourDO.settings
echo
"</Settings>" >> FourDO.settings
Y quedaría al final algo como esto:
<CpuClockHertz>12500000</CpuClockHertz>
<BiosRom2File>
</BiosRom2File>
<WindowHeight>565</WindowHeight>
<Language>
</Language>
<WindowFullScreen>True</WindowFullScreen>
<InactivePauseEmulation>True</InactivePauseEmulation>
" <BiosRomFile>C:\Juegos\4DO_Emulador\Super Street Fighter II Turbo\Bios\3do_bios_fz10.rom</BiosRomFile>"
" </Settings>"
¿Alguien sabe como hacer lo mismo sin que se añadan las comillas? ¿o como borrarlas después? porque así el emulador no reconoce la configuración.Gracias.