Powershell删除文件但保留最后的x版本

时间:2017-11-30 15:12:35

标签: powershell

我有一个文件夹结构,例如,100个文件夹。每个文件夹中都有200个文件。

我想删除(通过计划任务)每个文件夹中的所有文件,但保留最后10个版本。

我正试图提升Powershell,所以我猜这应该很简单。我创建了这个脚本,

public class AudioCapturer {
    AudioRecord recorder;
    private int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
    private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
    private static final int AUDIO_SAMPLE_RATE = 8000;
    private static int[] mSampleRates = new int[] { 8000, 11025, 22050, 44100 };
    int bufferSize = AudioRecord.getMinBufferSize(mSampleRates[3], channelConfig, audioFormat);


    protected void Start() {
        new Thread(new Runnable() {
                public void run() {
                    recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, mSampleRates[3], channelConfig, audioFormat, bufferSize);
                    Log.v("RECORDER","" +recorder.getState());
                    recorder.startRecording();

                    while(recorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING)
                    {
                        byte [] buffer = new byte[bufferSize];
                        Log.v("READ RESULT","" + recorder.read(buffer, 0, buffer.length));
                    }
                }
            }).start();
    }
}

它似乎循环遍历每个文件夹,但保留整个文件夹结构的最后10个文件,而不是每个文件夹。所以一些文件夹有0个文件,有些可能有2个文件,有些可能有8个文件。

任何指针都将不胜感激

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您确实需要拥有该CSV,则只需将Get-ChildItem -Recurse修改为Get-ChildItem $row -recurse即可。但是,如果您不需要创建CSV,则可以将其删除,并将第一个Get-ChildItem的结果导入下一个操作。

$Directory = "D:\Octopus\Packages"
$Keep = "10"

Get-ChildItem $Directory| ?{ $_.PSIsContainer } | Select-Object FullName | 
ForEach-object {Get-ChildItem $_.fullname -Recurse | 
where{-not $_.PsIsContainer}| sort CreationTime -desc | 
select -Skip $Keep | Remove-Item -Force }