0

我很想知道可能的方法来回显文件夹和子文件夹中的文件,并生成一个输出文件名,这些文件名被拾取删除X天。PowerShell脚本从文件夹和子文件夹回显文件,然后在X天内删除文件旧

我想在两个不同的层次

1级写这个剧本: PowerShell脚本只呼应的文件名,并给我的文件,这些文件已被确定要删除的输出。这应该包括文件夹和子文件夹。

级别2: 通过添加删除功能来合并level1脚本,这会删除文件夹和子文件夹中的文件。

我有一个移动脚本和一个直接脚本来删除,但我想确保选择正确的文件,我想知道正在被删除的文件名。

任何帮助,高度赞赏。

编辑从评论添加

我一直在尝试这样的事情在一个非常简单的方式

Get-ChildItem -Path c:\test | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)} 

我想添加一些参数,这将产生一个文件名的输出不同的文件夹位置

+2

请在问题中添加更多内容并显示您至少已经完成了一些基本的工作。这不是一个人们会为你写脚本的地方,但是可以帮助你修复并更好地理解它们。 – 2013-02-19 16:18:03

+0

肯定克里斯托弗......我完全同意你的话,并尊重这个论坛。我不会超越论坛的范围。我一直在以非常简单的方式尝试这样的东西Get-ChildItem -Path c:\ test | 其中{$ _。lastWriteTime -lt(Get-Date).addDays(-60)}我想添加一些参数,这会在不同的文件夹位置生成文件名输出。提前致谢..... – user1926332 2013-02-19 17:27:37

+0

这仍然不清楚。你想提供ex。路径作为函数参数?输出结果如何?什么是“在不同文件夹位置的文件名”?在问题中提供样本,而不是评论 – 2013-02-19 18:02:16

回答

1

我认为这是沿着你所需要的东西,我已经向你介绍了一些你可能不知道的概念,比如cmdletbinding,它允许你使用-whatif参数来干运行你的脚本。您还可以提供-verbose以查看沿途发生的情况,还可以使用Add-Content cmdlet附加到此处的日志。

所以,你可能像这样运行:

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -WhatIf -Verbose 

然后,当你准备删除,你可以运行它的文件,而不-WhatIf参数:

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -Verbose 

这不回答所有的问题,但应该帮助你开始,我已经在代码中提出了很多意见,所以你应该能够遵循这一切。

# Add CmdletBinding to support -Verbose and -WhatIf 
[CmdletBinding(SupportsShouldProcess=$True)] 
param 
(
    # Mandatory parameter including a test that the folder exists  
    [Parameter(Mandatory=$true)] 
    [ValidateScript({Test-Path $_ -PathType 'Container'})] 
    [string] 
    $Path, 

    # Optional parameter with a default of 60 
    [int] 
    $Age = 60 
) 

# Identify the items, and loop around each one 
Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-$Age)} | ForEach-Object { 

    # display what is happening 
    Write-Verbose "Deleting $_ [$($_.lastWriteTime)]" 

    # delete the item (whatif will do a dry run) 
    $_ | Remove-Item 
} 
0

这个问题有点含糊,但我认为这就像你想要的东西。
我喜欢David Martin的回答,但根据您的技能水平和需求,它可能有点太复杂。

param(
    [string]$Path, 
    [switch]$LogDeletions 
) 

foreach($Item in $(Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)})) 
{ 
    if($LogDeletions) 
    { 
     $Item | Out-File "C:\Deleted.Log" -Append 
    } 
    rm $Item 
} 
相关问题