
Quero remover a última linha de um arquivo de texto usando um script em lote do Windows. a última linha será sempre como 'TRAILER|'. Como posso conseguir isso. Meu arquivo .txt se parece com:
1220|6963|CAMINHÃO|5760|
1221|6964|CAMINHÃO|1440|
1220|6965|CAMINHÃO|2880|
1221|6966|CAMINHÃO|2880|
1221|6967|CAMINHÃO|2880|
TRAILER|5|
Responder1
Tentei do seu jeito escrevendo:
findstr /v TRAILER %SFTP_INDIR%\Location*.txt > %IN_DIR%\loc.txt
Aqui
%SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.
O arquivo de saída loc.txt não contém o último registro
TRAILER|5|
agora, mas imprimiu cada registro assim no arquivo de saída:D:\Batch\Batch_FWK\SFTP\inbox\Location.20150528060210.txt:1220|6963|TRUCK|5760|
findstr /v TRAILER filename >newfilename
funciona como você gostariaapenasao remover a última linha de umsolteiroarquivo.
Isto é porque:
Se mais de um arquivo for pesquisado, os resultados serão prefixados com o nome do arquivo onde o texto foi encontrado. O nome do arquivo não será impresso se a solicitação for explicitamente para um único arquivo ou se estiver pesquisando entrada canalizada ou entrada redirecionada.
Para contornar essa limitação, você pode usar um for
comando para processar vários arquivos únicos e gerar os resultados em um arquivo.
Experimente o seguinte comando em um arquivo em lote:
for /f "tokens=*" %%a in ('dir /b "%SFTP_INDIR%\Location*.txt"') do findstr /v TRAILER %%a >> %IN_DIR%\loc.txt
Ao executar a partir de uma linha de comando, substitua %%
por %
.
Fonteencontrarstr