Excluir a última linha sempre começando com 'TRAILER' de um arquivo de texto no script de lote do Windows

0

Eu quero remover a última linha de um arquivo de texto usando um script em lotes do Windows. a última linha será sempre como "TRAILER |". Como posso conseguir isso? Meu arquivo .txt se parece com:

1220 | 6963 | TRUCK | 5760 |

1221 | 6964 | CAMINHÃO | 1440 |

1220 | 6965 | TRUCK | 2880 |

1221 | 6966 | CAMINHÃO | 2880 |

1221 | 6967 | CAMINHÃO | 2880 |

TRAILER | 5 |

    
por Novice 10.06.2015 / 21:02

1 resposta

0

I tried in your way by writing :

findstr /v TRAILER %SFTP_INDIR%\Location*.txt > %IN_DIR%\loc.txt

Here %SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.

Output file loc.txt does not contain last record TRAILER|5| now, but it printed each record like this in the output file:

D:\Batch\Batch_FWK\SFTP\inbox\Location.20150528060210.txt:1220|6963|TRUCK|5760|

A resposta por Romeo Ninov

findstr /v TRAILER filename >newfilename

funciona como você deseja somente ao remover a última linha de um arquivo único .

Isso porque:

If more than one file is searched, the results will be prefixed with the filename where the text was found. The file name is not printed if the request was explicitly for a single file, or if searching piped input or redirected input.

Para contornar essa limitação, você pode usar o comando for para processar vários arquivos individuais e enviar os resultados para um arquivo.

Tente o seguinte comando em um arquivo em lotes:

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 % .

Fonte findstr

    
por 11.06.2015 / 16:07