Bat para Cambiar Tabulacion por ;

Amigos tengo un gran cantidad de archivos que en su contenido esta separado por tabulación y requiero cambiarlo por punto y coma.

Me gustaría hacerlo con un bat así cambio todo el contenido de una vez

Me pueden ayudar

Respuesta
1

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 :camtabpcom "%%a")
goto :EOF
:camtabpcom
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

Es fundamental que te asegures de que lo que hay antes del = en el comando:

set c=%%x&echo !c:    =;!>> kkk.txt)

Sea un tabulador porque a veces la página lo sustituye por un número de espacios y con eso se "estropea el invento".

Se supone que los archivos a convertir están en la carpeta indicada (debes cambiar el valor de la variable CARPETA para que se ajuste a tus necesidades), que son todos los que tienen extensión TXT (si no fuera así habría que ver como seleccionarlos en el comando DIR del primer FOR) y que los convertidos se quedan en la misma carpeta pero añadiendo "_conv" al nombre original. Este procedimiento elimina las líneas en blanco que no pasarían a los _CONV. Si eso fuera un problema habría que ver como resolverlo.

Ya me contarás como te va.

Estimado Muchas gracias, funciono en cambiar los datos, pero me deja con (; )los espacios en blanco. 

Habría que eliminar primero los espacios y luego cambiarlos por (;)??

Muchas gracias por su ayuda

Me refiero que entre líneas hay más de un espacio o tab y esos los rellena en ;

Ejemplo

xxxx 31-01-20 06-07 200.6.78.241 <-> 198.41.34.70 89

xxxx;31-01-20;06-07;200.6.78.241;;;;;;;;;<->;198.41.34.70;;

Saludos y gracias

Intuyo que el problema es precisamente sobre el que te advertía (lo digo porque en mis pruebas funciona correctamente, cambiando solo los tabuladores por ; y respetando los espacios). Es decir que lo que hay entre el carácter : y el = en el comando de sustitución no es un tabulador sino un espacio normal. El código hexadecimal del tabulador es 0x09 y el del espacio es 0x20.

Si, trate y no funciono, la idea seria eliminar los espacios entre textos (2 espacios en adelante) y dejar solo un espacio

De todas formas muchas gracias por tu ayuda, me ha servido mucho

No me queda muy claro que fue lo que intentaste y no funcionó. Te aseguro que este tipo de conversiones funcionan por lo que si alguna vez parecen no funcionar siempre hay algún error, de sintaxis o de concepto. No te rindas.

Entiendo, ahora, que no solo quieres convertir los tabuladores en ";" sino que también quieres que cuando haya más de un espacio se convierta en uno solo. Te sugiero que pruebes el BAT siguiente:

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

Asegúrate de que el set que incluye el "=;" tenga un tabulador delante del igual. Los otros convierten 4, 3, y 2 espacios, respectivamente, en un solo espacio y deben ir en ese orden.

Si aún así no te funciona como quieres sería bueno que me pasaras un archivo de ejemplo para ver si encuentro una razón.

Estimado si funciono :)

tuve que cambiar el orden delo siguiente

 set c=!c:    = !
 set c=!c:   = !
 set c=!c:  = !
 set c=!c:    =;!

pero me queda que reemplace el mismo archivo sin que quede con 

_conv

lo bueno que ya funciona, 

Le agradezco mucho su ayuda 

Si quieres reemplazar el archivo original solo tienes que cambiar el comando:

Copy /Y kkk.txt "%~n1_conv%~x1"

por este otro:

copy /Y kkk.txt "%~n1%~x1"

De todas formas, por lo que dices de cambiar el orden, sigo pensando que no hay un tabulador en el comando del ";" sino un número de espacios. Si quieres asegurarte de que haya un tabulador solo tienes que editar el BAT con el Bloc de Notas (Notepad), borrar lo que haya antes de "=;" y teclear el tabulador. Luego comprueba que se comporta como un tabulador (es decir que si te pones encima y te mueves a la izquierda salta varias posiciones en lugar de ir una a una).

Cuando des por buena la solución cierra la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas