非常新的PowerShell,我们有一些旧的日志文件,并希望定期删除。因此,为了实现这一点,首先尝试文件名的日志文件,并获得日期值的名称,然后尝试将它们与当前日期进行比较,但不知何故,它是不工作的?任何帮助将是杏子,
该文件夹具有
01-02-2023-20-31-32.log
02-02-2023-20-30-44.log
29-01-2023-20-30-45.log
30-01-2023-20-30-46.log
31-01-2023-20-29-58.log
代码块:
function deleteOlderLogFile () {
#get all the file inside the foler
$logFilePath = "C:\Users\LogFolder\";
$currentDate = Get-Date -Format "dd-MM-yyyy";
$olderFileName = @();
$getFileLogFileName = Get-ChildItem -Path $logFilePath;
foreach($fileName in $getFileLogFileName) {
$finalFileName = "$fileName".Substring(0,10);
$olderFileName += $finalFileName ;
}
$finalListOfFolder = $olderFileName -join ","
Write-Host ":"$finalListOfFolder;
##Delete the files
foreach($logFileName in $finalListOfFolder){
if ($logFileName -ge $currentDate) {
Write-Host $logFileName
}
}
}
3条答案
按热度按时间bvjveswy1#
不应该将日期作为字符串进行比较,而应该作为DateTime对象进行比较(特别是因为这里使用的日期格式是不可排序的)。
假设每个日志文件的文件名都有要比较的日期,并且您要删除名称中日期早于今天日期的所有文件,您可以执行以下操作:
请注意,我已经向Remove-Item cmdlet添加了一个
-WhatIf
开关。这是一项安全措施,使用该开关时,您将只会在控制台中看到一行,告诉您 * 将 * 执行什么操作。实际上不会删除任何内容。如果您对所有控制台消息都感到满意,即一切都符合预期,则可以删除这些
-WhatIf
交换机。vwhgwdsa2#
我快速浏览了一下你的代码,发现了一些问题。下面是我的
deleteOlderLogFile
版本。变更:
foreach
迭代了一个字符串$finalListOfFolder
。这是不可能的。迭代你的数组$olderFileName
DateTime
。也许这是不必要的,但从您的问题来看,我认为这正是您想要的。否则,您将比较DateTime
和String
,这可能不会得到您期望的结果。-ge
操作符,它将删除所有大于或等于当前日期的文件。我认为您想要删除旧文件,因此您应该使用-lt
(小于)。还有改进的空间,文件还没有实际删除,但现在它应该工作得足够好。
mxg2im7a3#
试试看
结果