
Windows バッチ スクリプトを使用して、テキスト ファイルから最後の行を削除したいのですが、最後の行は常に「TRAILER|」のようになります。どうすればこれを実現できますか。私の .txt ファイルは次のようになります。
1220|6963|トラック|5760|
1221|6964|トラック|1440|
1220|6965|トラック|2880|
1221|6966|トラック|2880|
1221|6967|トラック|2880|
トレーラー|5|
答え1
私は次のように書いてあなたのやり方を試しました:
findstr /v TRAILER %SFTP_INDIR%\Location*.txt > %IN_DIR%\loc.txt
ここ
%SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.
出力ファイル loc.txt には
TRAILER|5|
現在最後のレコードは含まれていませんが、出力ファイルには各レコードが次のように出力されています。D:\Batch\Batch_FWK\SFTP\inbox\Location.20150528060210.txt:1220|6963|TRUCK|5760|
findstr /v TRAILER filename >newfilename
希望通りに動作しますのみ最後の行を削除する場合シングルファイル。
それの訳は:
複数のファイルが検索された場合、結果の先頭にテキストが見つかったファイル名が付けられます。要求が明示的に 1 つのファイルに対して行われた場合、またはパイプ入力またはリダイレクト入力を検索する場合、ファイル名は印刷されません。
この制限を回避するには、for
コマンドを使用して複数の単一ファイルを処理し、結果を 1 つのファイルに出力することができます。
バッチ ファイルで次のコマンドを試してください。
for /f "tokens=*" %%a in ('dir /b "%SFTP_INDIR%\Location*.txt"') do findstr /v TRAILER %%a >> %IN_DIR%\loc.txt
コマンドラインから実行する場合は、%%
に置き換えます%
。
ソース検索文字列