Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 用于删除指定文件名的脚本/工具_File_Powershell_Batch File - Fatal编程技术网

File 用于删除指定文件名的脚本/工具

File 用于删除指定文件名的脚本/工具,file,powershell,batch-file,File,Powershell,Batch File,我需要一个批处理文件/脚本/工具来删除文件夹中的指定文件。 我有一个包含很多.xml文件的文件夹。它只能包含几个字符(指示日期)的文件名差异 这部分的长度是15串 aa_bb_000000001 这部分代表一个日期 2015_10_1 我需要删除所有的文件,该部分的名称与日期是最早的。 因此,批处理应仅保留以下文件: aa_bb_000000001_2015_10_1.xml aa_bb_000000002_2015_10_1.xml aa_bb_000000005_2015_7_7.xml

我需要一个批处理文件/脚本/工具来删除文件夹中的指定文件。 我有一个包含很多.xml文件的文件夹。它只能包含几个字符(指示日期)的文件名差异

这部分的长度是15串

aa_bb_000000001
这部分代表一个日期

2015_10_1
我需要删除所有的文件,该部分的名称与日期是最早的。 因此,批处理应仅保留以下文件:

aa_bb_000000001_2015_10_1.xml

aa_bb_000000002_2015_10_1.xml

aa_bb_000000005_2015_7_7.xml


这里有一个相当简短的解决方案。要了解代码的工作原理,最好关注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

你应该发布你到目前为止所拥有的,然后人们可以帮助你让它工作。不要指望社区人员为你做这些工作……我不明白这一点,
我需要删除所有文件,其中名称中带有日期的部分最早。
以及结果。它不匹配。@dark fang从那些应该被删除的文件aa_bb_000000001_2015_9_1.xml,aa_bb_000000001_2015_15.xml,aa_bb_000000001_2015_10_1.xml,aa_bb_000000001_2015_9_1.xml,aa_bb_000000001_2015_9_15.xml,因为文件名中有更早的日期(2015_9_1和2015_9_15)。那么,你应该自己试试看。如果您有任何问题,请编辑问题并告知我们。你不能只问一个问题而不提供你的脚本,让我们从头开始为你做这一切!@黑牙我知道,但我不知道该怎么开始。剧本应该是这样的。我将尝试分析以了解它是如何工作的。非常感谢你的工作和他写作的时间!
$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