.png)
Suponhamos que eu tenha este arquivo de texto:
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*000000000000302082890010000000000T SECTEUR SANITAIRE JIJEL 1
*000000000000306758680008500000000TIC ZIAMA MANSOURIAH 1
O cabeçalho e todas as linhas contêm 62 caracteres. se você olhar o cabeçalho e começar na posição 42 022017
, verá que 02
é o mês atual e 2017
é o ano; da posição 48 a 62 (ou seja, depois de 052017
) temos 14 valores ( 10801801000999
) e a 0
(zero).
A última linha contém ou digamos que não é idêntica às outras linhas.
Digamos que tenho vários arquivos da mesma estrutura; e quero definir a data no cabeçalho para a data atual (estamos em agosto de 2019, então quero entrar 082019
no cabeçalho em vez de 052017
). Após a data ( 052017
) quero retirar os valores que vêm depois (neste caso ( 10801801000999
) e substituí-los por espaços e manter o valor (0), de forma que o cabeçalho mantenha seus 62 caracteres. Alguém pode me ajudar a escrever alguns código (um arquivo em lote: .bat) para fazer o trabalho? Principalmente se eu tiver vários arquivos de texto e cada um deles contiver mais de 5.000 linhas.
Responder1
O lote seguinte será
- iterar arquivos *.txt na pasta atual,
- renomeie o original para extensão .bak
- leia o cabeçalho, modifique e grave-o no nome original
- copie o restante do arquivo salvo
A propósito, o SuperUser não é um serviço de escrita de scripts;
um pouco mais de pesquisa própria e tentativas de codificação podem ser esperadas.
:: 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
Exemplo de saída:
> SU_1472064.cmd
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*0000000000003000345800185000000000000002082019 0
Job done