0

嘿伙计们,所以我写了这个脚本来自动删除指定文件夹中的文件。

$oldTime = [int]25 # 0 days
$old2Time = [int] 10 
foreach ($path in "C:\Test") {
Write-Host "Trying to delete files older than days, in the folder $path" -    
ForegroundColor Green
# Write information of what it is about to do   
Get-ChildItem $path -Recurse -Include "*.txt", "*.docx", "*.xlsx" #| WHERE    
{($_.CreationTime -le $(Get-Date).AddDays($oldTime))} #| Remove-Item -Recurse -Force}
if ($_.CreationTime -le $(Get-Date).AddDays(-$oldTime)) 
{
Remove-Item -Recurse -Force
}
elseif ($_.CreationTime -le $(Get-Date).AddDays(-$old2Time))
{   
Remove-Item -Recurse -Force
}
}
# deleting the old files

它以前工作过,我只检查一次并删除任何旧的东西。但是现在我希望它检查是否存在任何超过一定天数的文件,然后删除它们。如果不是,则检查超过另一个天数。但是当我运行它时,我得到“cmdlet Remove-Item at command pipeline position 1 Supply values for the following parameters: Path[0]:”

有谁知道我做错了什么?谢谢

4

2 回答 2

3

您正在调用 Remove-Item 但您从未告诉它要删除什么。您需要为其提供要删除的文件的路径/名称。也没有理由使用 -Recurse 参数。

于 2013-08-28T15:13:32.137 回答
0

我将您的日期范围放在一个数组中,并在这些日子里进行迭代。将您的日期添加到 $dayList 数组,并将您的路径添加到 $paths 数组。这应该做你想要的。

$daysList = @(25,10)
$paths = @("C:\Test")

function removeOldItems($days)
{
    $items = Get-ChildItem $path -Recurse -Include "*.txt", "*.docx", "*.xlsx" | WHERE {($_.CreationTime -le $(Get-Date).AddDays($oldTime))}
    if ($items)
    {
         $items | Remove-Item -Force
    }
    return $items
}


foreach($path in $paths)
{
    foreach ($days in $daysList)
    {
        Write-Host "Trying to delete files older than $days, in the folder $path" -ForegroundColor Green
        $items = @(removeOldItems($oldTime))
        if (!$items)
        {
            Write-Host "Did not remove anything."
        }
        else
        {
            Write-Host "Removed $($items.Count) items!"
        }
    }
}
于 2013-08-28T22:43:44.387 回答