.png)
Supongamos que tengo este archivo de texto:
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*000000000000302082890010000000000T SECTEUR SANITAIRE JIJEL 1
*000000000000306758680008500000000TIC ZIAMA MANSOURIAH 1
El encabezado y todas las líneas contienen 62 caracteres. si miras el encabezado y comienzas desde la posición 42 verás que 022017
es 02
el mes actual y 2017
el año; desde la posición 48 a la 62 (es decir, después de 052017
) tenemos 14 valores ( 10801801000999
) y un 0
(cero).
La última línea contiene o digamos que no es idéntica a las otras líneas.
Digamos que tengo varios archivos de la misma estructura; y quiero establecer la fecha en el encabezado en la fecha actual (estamos en agosto de 2019, por lo que quiero aparecer 082019
en el encabezado en lugar de 052017
). Después de la fecha ( 052017
) quiero eliminar los valores que vienen después (en este caso ( 10801801000999
) y reemplazarlos por espacios y mantener el valor (0), de manera que el encabezado mantenga sus 62 caracteres. ¿Alguien puede ayudarme a escribir algunos? código (un archivo por lotes: .bat) para hacer el trabajo? Especialmente si tengo varios archivos de texto y cada uno de ellos contiene más de 5000 líneas.
Respuesta1
El siguiente lote
- iterar archivos *.txt en la carpeta actual,
- cambiar el nombre del original a la extensión .bak
- lee el encabezado, modifícalo y escríbelo con el nombre original
- copiar el resto del archivo guardado
Por cierto, SuperUser no es un servicio de escritura de guiones,
se podría esperar un poco más de investigación propia e intentos de codificación.
:: Q:\Test\2019\08\16\SU_1472064.cmd
@Echo off
:: Get MonthYear
for /f "usebackq" %%A in (`
powershell -NoP -C "(Get-Date).ToString('MMyyyy')"
`) Do Set MonthYear=%%A
:: iterate .txt files in current folder
For /f "delims=" %%F in ('Dir /B /O-D *.txt') Do Call :sub "%%~F"
Echo Job done
Goto :Eof
:Sub filename
:: Rename original file to .bak extension
Ren %1 "%~1.bak"
:: read header line
Set /p "Header=" <"%~1.bak"
Echo 1234567890123456789012345678901234567890123456789012345678901234567890
Echo _________1_________2_________3_________4_________5_________6_________7
Echo %Header%
Set "NewHeader=%Header:~0,41%%MonthYear% 0"
Echo %NewHeader%
(Echo %NewHeader%
More +1 "%~1.bak"
) > %1
Salida de muestra:
> SU_1472064.cmd
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*0000000000003000345800185000000000000002082019 0
Job done