查找最旧的文件组并执行操作

时间:2015-07-10 17:53:23

标签: powershell get-childitem

我正在编写一个脚本来查找最旧的文件组,一旦找到我需要能够重命名它们的扩展名。

以下是我到目前为止的内容

$DirectoryToScan = "C:\Temp"
$SubDirectories = @(gci -path $DirectoryToScan -rec -ea SilentlyContinue | ? {$_.PSIsContainer -and $_.Fullname -notmatch 'Test'} | ? {$_.GetFiles().count -gt 0} | % {$_.FullName})
$Files = $SubDirectories | gci -ea SilentlyContinue | Select FullName, CreationTime | Sort CreationTime

我得到的是以下

FullName                                                       CreationTime         
--------                                                       ------------         
C:\Temp\Firefox\Firefox\App\DefaultData\profile\bookmarks.html 4/6/2015 1:16:32 PM  
C:\Temp\Firefox\Firefox\App\DefaultData\profile\bookmarks.html 4/6/2015 1:16:32 PM  
C:\Temp\Firefox\Firefox\App\DefaultData\profile\bookmarks.html 4/6/2015 1:16:32 PM  
C:\Temp\Firefox\Firefox\Data\profile\bookmarks.html            4/6/2015 1:16:33 PM  
C:\Temp\Firefox\Firefox\Data\profile\bookmarks.html            4/6/2015 1:16:33 PM  
C:\Temp\Firefox\Firefox\help.html                              4/6/2015 1:16:34 PM  
C:\Temp\Folder1\IND0314C1AC04.htm                              7/10/2015 10:46:23 AM

我的问题是如何选择具有最早创建时间的所有文件,但是我需要批量执行此操作,因此可能存在具有多个月创建时间的文件

多个月的例子

FullName                  CreationTime
--------                  ------------
File1.htm                 4/1/2015 1:26:32 PM
File2.htm                 4/15/2015 10:46:14 AM
File3.htm                 5/1/2015 12:01:19 PM
File4.htm                 5/20/2015 1:15:39 AM
File5.htm                 7/10/2015 1:00:01 PM

因此,在我的脚本运行时,它第一次仅在4月份使用创建时修改文件,在下次运行时需要修改3月份的文件,等等

1 个答案:

答案 0 :(得分:0)

如果要选择具有最早日期的文件,可以按创建日期对文件进行分组,按日期排序,然后选择第一个组(按升序排序时最早的日期):

$Files = $SubDirectories |
         gci -ea SilentlyContinue |
         Group-Object { $_.CreationTime.Date } |
         Sort-Object { Get-Date $_.Name } |
         Select-Object -First 1 -Expand Group |
         ...