
Quiero eliminar la última línea de un archivo de texto usando un script por lotes de Windows. la última línea siempre será como 'TRAILER|'. ¿Cómo puedo lograr eso? Mi archivo .txt se ve así:
1220|6963|CAMIÓN|5760|
1221|6964|CAMIÓN|1440|
1220|6965|CAMIÓN|2880|
1221|6966|CAMIÓN|2880|
1221|6967|CAMIÓN|2880|
TRÁILER|5|
Respuesta1
Lo intenté a tu manera escribiendo:
findstr /v TRAILER %SFTP_INDIR%\Location*.txt > %IN_DIR%\loc.txt
Aquí
%SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.
El archivo de salida loc.txt no contiene el último registro
TRAILER|5|
ahora, pero imprimió cada registro de esta manera en el archivo de salida:D:\Batch\Batch_FWK\SFTP\inbox\Location.20150528060210.txt:1220|6963|TRUCK|5760|
ElrespuestaporRomeo Ninov
findstr /v TRAILER filename >newfilename
funciona como te gustaríasoloal eliminar la última línea de unsolteroarchivo.
Esto es porque:
Si se busca en más de un archivo, los resultados tendrán como prefijo el nombre del archivo donde se encontró el texto. El nombre del archivo no se imprime si la solicitud fue explícitamente para un solo archivo o si se busca una entrada canalizada o redirigida.
Para evitar esta limitación, puede utilizar un for
comando para procesar varios archivos individuales y generar los resultados en un solo archivo.
Pruebe el siguiente comando en un archivo por lotes:
for /f "tokens=*" %%a in ('dir /b "%SFTP_INDIR%\Location*.txt"') do findstr /v TRAILER %%a >> %IN_DIR%\loc.txt
Cuando se ejecuta desde una línea de comando, reemplácelo %%
con %
.
Fuenteencontrartr