.bat que haga un tipo replace

Resulta que todos los días llega un archivo txt con un salto de linea, lo cual para proceder a su corrección, utilizamos la tecla de retroceso del teclado para corregir la linea.
Pasos que realizamos para su corrección:
1. Tecleamos dos veces la tecla de retroceso para quitar el salto de linea.
2. Tecleamos dos veces la tecla espaciadora para dejar la linea en su correcto orden.

1 respuesta

Respuesta
1

No entiendo muy bien lo que quieres. Supongo que el archivo TXT que quieres tratar tiene más cosas, además de ese salto de línea que quieres eliminar. Por otra parte parece que en realidad no quieres eliminar el salto de línea sino sustituirlo por una línea con dos espacios en blanco. Esto último no he conseguido resolverlo con un BAT puro, he tenido que recurrir a una pequeña incursión en Powershell para conseguirlo. El bat que sigue sustituye todas las líneas en blanco de un archivo de nombre ANONIMO.TXT (con un máximo de 1000 líneas, configurable) por líneas con dos espacios y respeta el resto de las líneas. Si no es eso exactamente lo que necesitas dímelo y vemos si puedo aportar algo:

@echo off
Setlocal EnableDelayedExpansion
Echo.> temp.txt
del /q kkk.txt
for /f "skip=2 tokens=1*" %%x in ('fc /LB1000 /n temp.txt anonimo.txt ^| findstr -v "*****"') do (
if "%%y"=="" (
@PowerShell  ^
   $linea = '  '; ^
   $linea ^| Out-File kkk.txt -Append -Encoding ASCII
%End PowerShell%
)
if not "%%y"=="" echo %%y>>kkk.txt
)

El resultado de la conversión lo deja en otro archivo de nombre KKK.TXT

Perdón. Parece que el Powershell también tiene algún problema con los espacios. En lugar de

   $linea = '  '; ^

habría que poner:

   $linea = ' ' + ' '; ^

Hola,

Perdón por la demora en responder, lo que necesito es realmente quitar la línea vacía de un txt,

Te adjunto enlace de descarga del archivo -->  https://we.tl/t-KrxfHUAHy0 

Nota: del archivo que te adjunto es la línea 40990 que se debe quitar y dejar en el orden correcto.

Estoy intentando con algo así:

Setlocal EnableDelayedExpansion
set ruta=C:\Users\Downloads\OWF
cd "%ruta%"
del /q Salida.txt
for /f "tokens=*" %%a in ('dir /b /o-d REC3_GES_PORT_*.txt') do (call :limpiar "%%a"&move "%ruta%\Salida.txt" "C:\Users\Downloads\OWF_FINAL"&goto :eof)
:limpiar
dir %~1
for /f "tokens=*" %%x in (%~1) do (
set linea=%%x
set linea=!linea:^'  '; ^>=!
if not #!aux!#==## echo %%x>>Salida.txt
)

Gracias por tu ayuda.

Vale. Resultas ser un anónimo algo conocido. Para empezar ese bat que has puesto ahí no parece muy razonable porque utiliza una variable (AUX) que no veo que se cargue en ningún sitio.

Por otro lado estudiando tu archivo y viendo lo que rodea a la línea 40990 entiendo que no es solo eliminar esa línea lo que quieres sino que quieres eliminarla, insertar dos espacios en la línea anterior y fusionarla con ella. Esto explica tu primera definición del problema. Más parece un problema a resolver con una macro de un editor de texto pero esa no es mi especialidad. ¿Qué editor de texto utilizas que te permite saber que es la línea 40990? Lo digo por si tiene posibilidad de definir macros. No pareces muy tentado a usar Powershell porque todavía estoy esperando que me digas si probaste lo que te sugería a propósito de otro problema, pero intuyo que sería más sencillo en esa shell. Y yo no lo enfocaría, a la vista del archivo que me has pasado, en la presencia de una línea en blanco sino más bien en la presencia de una línea de menos de 999 caracteres. Eso tiene la ventaja de situar el problema en la línea que estás tratando en lugar de situarlo en la siguiente pero teniendo que mantener en memoria la línea anterior para poder fusionarla con la siguiente. Dime si este camino es válido o solo valdría para este caso y no con carácter general, para ver si se me ocurre algo.

Mientras te piensas lo que te he comentado he preparado un BAT que creo que hace lo que yo he dicho:

@echo off
Setlocal EnableDelayedExpansion
set ruta=C:\Users\Downloads\OWF
cd "%ruta%"
del /q salida.txt
for /f "tokens=*" %%a in ('dir /b /o-d REC3_GES_PORT_*.txt') do (call :limpiar "%%a"&goto :eof)
:limpiar
set indlinc=N
set lincorta=
dir %~1
for /f "tokens=*" %%x in (%~1) do (
set linea=%%x
set aux=!linea:~969,1!
if not #!aux!#==## echo %%x>>salida.txt
if #!aux!#==## if !indlinc!==S set indlinc=N&echo !lincorta!  !linea!>>salida.txt&set lincorta=
if #!aux!#==## if !indlinc!==N set indlinc=S&set lincorta=!linea:~0,-1!
)

Pruébalo si quieres y ya me cuentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas