¿Cómo modificar masivamente múltiples archivos TXT con .bat?

Tengo una serie de archivos TXT en una carpeta con la siguiente estructura:

input_overlay = ":\overlays\Arcade4k\3countb.cfg"

custom_viewport_height = "794"

custom_viewport_width = "1085"

custom_viewport_x = "415"

custom_viewport_y = "103"

Y necesito crear un .BAT que abra cada TXT y me cambie los valores numéricos por el resultado de multiplar estos por el numero 1,333333333333333.

Básicamente que multiplique 794*1,333333333333333 y los otros tres valores y me ponga el valor final sin decimales"1058", quedando así

input_overlay = ":\overlays\Arcade4k\3countb.cfg"

custom_viewport_height = "1058"

custom_viewport_width = "1446"

custom_viewport_x = "553"

custom_viewport_y = "137"

¿Alguna suferencia de como podría hacerlo? Hace años que no toco los .bat y no encuentro por internet lo que necesito.

1 respuesta

Respuesta
1

No tengo mucho tiempo para meterme a fondo con esto, pero se me ha ocurrido algo y quiero proponértelo.

He generado este bat para hacer una prueba:

@echo off
set valor="794"
set /a mult=1,3333333
set /a num=4
set /a div=3
set valor=%valor:"=%
echo %valor% %mult%
set /a opcion1= %valor%*%mult%
set /a opcion2= %valor%*%num%/%div%
echo opcion1: %opcion1% opcion2: %opcion2%

Hasta donde yo sé las variables numéricas en BAT no admiten decimales. Si ejecutas este BAT te saldrá lo siguiente:

D:\BAT>type prueba.bat
@echo off
set valor="794"
set /a mult=1,3333333
set /a num=4
set /a div=3
set valor=%valor:"=%
echo %valor% %mult%
set /a opcion1= %valor%*%mult%
set /a opcion2= %valor%*%num%/%div%
echo opcion1: %opcion1% opcion2: %opcion2%
D:\BAT>prueba
794 1
Opcion1: 794 opcion2: 1058
D:\BAT>

Puedes ver que la opción de utilizar 4/3 como sustituto de 1,3333333 puede servir para lo que quieres.

Si necesitas completar el BAT porque todavía no sabes como hace lo demás intentaré meterme con él cuando tenga un rato.

Al final he tenido un rato y este es el bat que he preparado:

@echo off
Setlocal EnableDelayedExpansion
set carporig=d:\carpeta prueba\origen
set carpdest=d:\carpeta prueba\destino
set /a num=4
set /a div=3
for /f "tokens=*" %%a in ('dir /b "%carporig%\*.txt"') do call :tratarch "%%a"
goto :eof
:tratarch
del /q temp.txt>nul 2>&1
set archivo=%~1
echo tratando archivo %~1
for /f "usebackq tokens=1,2,3" %%x in ("%carporig%\%~1") do (
   if not %%z gtr "0" echo %%x %%y %%z>>temp.txt
   if %%z gtr "0" (
      set valor=%%z
      set valor=!valor:"=!
      set /a valor=!valor!*%num%/%div%
      echo %%x %%y "!valor!">>temp.txt
      )
   )
copy /y temp.txt "%carpdest%\%~nx1"
goto :eof

En las variables CARPORIG y CARPDEST debes poner el path de la carpeta origen (en la que están los TXT a modificar) y el de la carpeta destino (en la que se dejarán los TXT modificados). Si hay TXT que no tengan la estructura común puede que pase algo raro, pero prueba si quieres y ya lo miramos.

Buenos dias gggirald, muchas gracias por tu interes, he probado los dos codigos que has puesto pero no he obtenido resultados. Nada mas ejecutar los .bat se me cierra el proceso sin que llegue a hacer nada.  ¿Cómo modificar masivamente múltiples archivos TXT con .bat?

@echo off
Setlocal EnableDelayedExpansion
set carporig=C:\Users\C4rl0s\Desktop\prueba\origen
set carpdest=C:\Users\C4rl0s\Desktop\prueba\destino
set /a num=4
set /a div=3
for /f "tokens=*" %%a in ('dir /b "%carporig%\*.txt"') do call :tratarch "%%a"
goto :eof
:tratarch
del /q temp.txt>nul 2>&1
set archivo=%~1
echo tratando archivo %~1
for /f "usebackq tokens=1,2,3" %%x in ("%carporig%\%~1") do (
if not %%z gtr "0" echo %%x %%y %%z>>temp.txt
if %%z gtr "0" (
set valor=%%z
set valor=!valor:"=!
set /a valor=!valor!*%num%/%div%
echo %%x %%y "!valor!">>temp.txt
)
)
copy /y temp.txt "%carpdest%\%~nx1"
goto :eof

Puedes ejecutarlo desde una ventana CMD para ver lo que va diciendo. O incluir un PAUSE antes del primer GOTO :EOF si ejecutas el BAT desde el explorador de Windows

Perfecto, eso ultimo me ha ayudado a dar con el problema. No eran al final los archivos txt sino cfg, que se me abren identico a un txt y eso me confundio. He cambiado las extensiones y ha ido todo excelente. Te lo agradezco muchisimo, probablemente me habria pasado semanas enteras buscando la formula y seguro que lo habria dejado al final por imposible pues, mi nivel en este tema es mas bien bajo. de nuevo mil gracias

Me alegro mucho. Si quieres puedes cerrar (y valorar) la pregunta. Aprovecho para decirte que si quieres poner el texto de un BAT (por ejemplo) en una ventanita aparte (cosa que lo hace más legible) puedes abrir esa ventanita utilizando el icono "<>" de la barra de herramientas de la página.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas