我需要一个批处理文件/脚本/工具来删除文件夹中的指定文件。 我有一个包含大量.xml文件的文件夹。它可以包含名为仅有几个字符的差异的文件(表示日期)。
// given the current url is http://example.com/user/3/inbox/unread?sort=desc
$route.updateParams({id:"2"});
// will become http://example.com/user/2/inbox/unread?sort=desc
这部分的长度是15个字符串
$("#dropDownList").val(selected_color);
此部分代表日期
aa_bb_000000001_2015_9_1.xml
aa_bb_000000001_2015_9_15.xml
aa_bb_000000001_2015_10_1.xml
aa_bb_000000002_2015_5_5.xml
aa_bb_000000002_2015_8_14.xml
aa_bb_000000002_2015_10_1.xml
aa_bb_000000005_2015_7_7.xml
.
.
我需要删除日期最早的名称部分的所有文件。 因此,批处理应仅保留文件:
aa_bb_000000001_2015_10_1.xml
aa_bb_000000002_2015_10_1.xml
aa_bb_000000005_2015_7_7.xml
答案 0 :(得分:0)
这是一个相当短的解决方案。要了解代码的工作原理,最好关注Group-Object命令的作用,正则表达式以及它们与-match运算符的交互方式:
$Groups = Get-ChildItem "C:\XMLFiles\*.xml" | Group-Object {$_.Name.Substring(0, 15)}
$FilesToKeep = @{}
foreach ($Group in $Groups) {
$MaxDate = "00000000"
foreach ($FileInfo in $Group.Group) {
$FileInfo.name -match "(\d{4})_(\d{1,2})_(\d{1,2}).xml$" | Out-Null
$Date = $Matches[1]+([int]$Matches[2]).ToString("00")+([int]$Matches[3]).ToString("00")
if ($Date -gt $MaxDate) {
$MaxDate = $Date
$FilesToKeep[$Group.Name] = $FileInfo.FullName
}
}
}
Get-ChildItem "C:\XMLFiles\*.xml" | Where-Object {-not $FilesToKeep.ContainsValue($_.FullName)} | Remove-Item