2016-05-31 5 views
-1

私はGoogleで私の問題の解決策を見つけることができませんでした。誰かが助言を与えることができるのだろうかと思っていました。最新でないファイルを削除するためのバッチスクリプト

私はこのように見ているファイルの完全なフォルダがありますなど、異なるデバイスのためのさまざまな種類のダウンロード複数のログファイルがある

...

device1_ip_1234asdf.txt 
device1_stats_1234asdf.txt 
device1_ip_1234asdf2.txt 
device1_stats_1234asdf2.txt 
device2_ip_1234asdf.txt 
device2_stats_1234asdf.txt 
device2_ip_1234asdf2.txt 
device2_stats_1234asdf2.txt 

を。フォルダを処理した後、次のようになりますので

は、私が唯一、各デバイス用の最新のログファイルを必要とする:ファイル名から最新のファイルを指示する方法はありません

device1_ip_1234asdf.txt 
device1_stats_1234asdf.txt 
device2_ip_1234asdf.txt 
device2_stats_1234asdf.txt 

、それがなければなりません日付変更タグから決定される。

私は基本的に行くのスクリプトを記述する必要があります。

get list of files for device1, log type ip 
del device1_ip* where file is not latest 
get list of files for device1, log type stats 
del device1_stats* where file is not latest 
repeat for device2, device3, etc 

誰もが正しい方向に私を指すことができますか?私はこれをbashで簡単にやり遂げることができると確信していますが、Windowsのバッチファイルは私に困惑しています。

私はファイル名の配列を読み込む方法を見つけるのに苦労しています。

+0

私はそれを見てきましたが、それは1つのデバイスだけで動作することを除いてほとんど解決策です。 Device1にはDevice2よりも新しいファイルが存在する可能性があるため、特定のデバイス用の古いログファイルは残しておき、最新のものは削除します。 しかし...私は可能性のある選択肢を見て、テストします。 – averagescripter

答えて

0
@echo off 
setlocal 

rem Process all files, latest first 
for /F "tokens=1,2* delims=_" %%a in ('dir /A:-D /O:-D /B *.txt') do (
    rem If this file is the latest of this device_type 
    if not defined file[%%a_%%b] (
     rem Keep it 
     set "file[%%a_%%b]=1" 
    ) else (
     rem Delete it 
     ECHO del "%%a_%%b_%%c" 
    ) 
) 
0

は、ご提案のため

をありがとう、私は、上記の問題にフォルダ内の7最新のファイルを保持するバッチファイルを行の変更を使用してそれをソートすることになりました。/fに対する

"スキップ= 1つのEOL =:delims =" %%( 'DIR/B/ODのデバイス1 * IP * .TXT')におけるFは、標的とすることで@del "%% F"

を行います以前のログファイルをすべて削除しています。

ありがとうございます!

+0

この方法では、各device_typeペアをハードコードする必要があります。 [my solution](http://stackoverflow.com/questions/37535023/batch-script-to-delete-non-latest-files/37535429#37535429)を参照してください。 – Aacini

関連する問題