Reemplazar separador , o ; por | comando windows

Me gustaría saber como puedo hacer un bat que reemplace los separadores,(coma) o ;(punto y coma) por | (pipe) en un txt o csx y el resultado quede en un txt

1 respuesta

Respuesta
1

Prueba con esto:

@echo off
Setlocal EnableDelayedExpansion
del /q %2>nul 2>&1
for /f "tokens=* delims=" %%a in ('type %1') do (
   set v=%%a
   set v=!v:,=^|!
   set v=!v:;=^|!
   Echo !v!>>%2
 )

Lo salvas por ejemplo como CAMBIA.BAT y lo ejecutas desde una ventana CMD de la forma siguiente:

CAMBIA "C:\Carpeta Origen\Archivo origen.txt" "C:\CarpDest\ArchDest.txt"

Si todo va bien en ArchDest.txt deberían estar las líneas de Archivo origen.txt pero con las comas y puntos y comas cambiados por pipas. Si tienes algún problema dímelo y vemos como resolverlo.

como puedo hacer para que tu código se ejecute para todos los archivos txt de la carpeta, y reemplace el delimitador punto y coma solamente, ya que ahora todos los archivos me los van a enviar ahora así. 

Encontré el siguiente código pero tampoco se como ajustarlo para cambiar punto y coma a pipe. (trate de combinar los códigos pero no funciono correctamente)

@echo off
Setlocal EnableDelayedExpansion
@echo off
for /f %%a in ('dir /b *.txt') do (call :camcomtb %%a)
goto :EOF
:camcomtb
del kkk.txt
for /f "tokens=* delims=" %%a in (%1) do (set c=%%a&echo !c:,= ! >> kkk.txt)
copy /Y kkk.txt %1
del kkk.txt
goto :EOF

Prueba con esto:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=d:\carpeta prueba
cd "%carpeta%"
for /f "tokens=* delims=" %%a in ('dir /b *.txt') do (call :camcompip "%%a")
goto :EOF
:camcompip
del /q kkk.txt>nul 2>&1
for /f "tokens=* delims=" %%x in ('type "%~1"') do (set c=%%x&echo !c:,=^|!>> kkk.txt)
copy /Y kkk.txt "%~n1_conv%~x1"
goto :EOF

Tienes que ajustar el valor de la variable CARPETA a lo que te interese.

Los archivos convertidos añaden "_CONV" al nombre original para evitar machacar el archivo de partida.

Si tienes algún problema dímelo.

Por cierto, si quieres colocar el código en una ventanita independiente (que es algo más vistoso y cómodo) solo tienes que usar el icono "<>" de la barra de herramientas de la página (herramienta "snippet"), tercer icono desde la derecha.

gracias por tu ayuda, el archvio es grande y cuando reemplaza los ; no lo  hace completo

los siguientes son los encabezados de como quedo, en los encabezados no se hizo ningún remplazo, y en las lineas se reemplazo en algunas ocasiones

llave control;ps;soc;operación;orden(ot);sistema origen;fecha cierre;otp;oth;mat_trab_1;codigo _trabajo1;desc_subtipo_trabajo;mat_trab2;codigo _trabajo2;desc_codigo_actividad;cantidad;precio_unitario;valor_total_neto_pxq;id_proveedor;nombre_proveedor;id_movil;ced_tecnico;nombre_tecnico;ced_interventor;nombre_interventor;cuenta;nit_cliente;cod_iata;codigo_dane;ce;i;descriptivo imputacion;indicador impuesto;descriptivo indicador impuesto;id sitio/nodo;ceco;descriptivo centro costo;nombre del proyecto;elemento_pep;nombre_pep;ce_gestor;pospre;contrato marco;tipo de contrato;contrato legal;año;usuario;grupo de trabajo;fecha contabilización;gerencia;regional;rubro;servicio;tipo de red;clasificación de la actividad;factura;fecha emision factura;fecha radicacion factura;gcp;numero de documento;orden de compra;em;observación

Perdón. Aunque leí el texto, a la hora de reprogramar el bat que proponías no me di cuenta de que me estaba basando en la sustitución de la coma por la pipa. Es lo que se hace en el comando del DO del FOR de la rutina CAMCOMPIP (de cambiar coma por pipa, precisamente):

set c=%%x&echo !c:,=^|!>> kkk.txt

De modo que habría que cambiar la coma por un punto y coma. Además debería cambiarse el nombre de la rutina, por coherencia. Quedaría así:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=d:\carpeta prueba
cd "%carpeta%"
for /f "tokens=* delims=" %%a in ('dir /b *.txt') do (call :campcompip "%%a")
goto :EOF
:campcompip
del /q kkk.txt>nul 2>&1
for /f "tokens=* delims=" %%x in ('type "%~1"') do (set c=%%x&echo !c:;=^|!>> kkk.txt)
copy /Y kkk.txt "%~n1_conv%~x1"
goto :EOF

Al repasar las preguntas respondidas me he encontrado con esta que está pendiente. ¿Has probado la última sugerencia?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas