Windows – Powershell:单个脚本来“清理”多个文件的多个文件夹

前端之家收集整理的这篇文章主要介绍了Windows – Powershell:单个脚本来“清理”多个文件的多个文件夹前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想创建一个维护脚本,它将在我们的每个服务器上运行,以清理常见的drop / archive目录.优选地,脚本将使用参考文件用于文件夹路径和期望的老化限制.然后脚本将清除早于老化限制的文件路径.输入参考文件看起来像这样:
c:\logs\iis\siteA\ 30
c:\logs\job1\ 60
e:\archive\clientA\ 90

第一个组件是文件路径;第二个是应保留文件的天数,用空格分隔.

现在为脚本我有以下内容;但是,我对脚本编写经验感到尴尬. (我更注重网络化)

#Attempted loop
Foreach ($ParentDir = Get-Content .\paths.txt $arg1,$arg2)
{$limit = (Get-Date).AddDays(-$arg2)
$path = $ParentDir

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force}

我觉得逻辑很接近,但我的语法已关闭.我的方法可行吗?有没有更好的办法?你能帮忙解决这个问题吗?使用poweshell v3.

信用额度归功于我从this邮政deadlydog起采取的大量逻辑.

编辑包含您请求的文本文件
c:\logs\iis\siteA\ -30
c:\logs\job1\ -60
e:\archive\clientA\ -90

我测试了新的代码与我所处的内容分开,但我认为它应该仍然可以做你想要的.

$controlfile = "c:\path\to\yourfile.txt"    
$curr_date = Get-Date

New-Item -ItemType directory -Path f:\delete

foreach ($line in get-content $controlfile)
{
    $split = $line.split(" ")
    $file_path = $split[0]
    $max_days = $split[1]

    $del_date = $curr_date.AddDays($max_days)

    # move the files to the kill directory
    Get-ChildItem $file_path | Where-Object { $_.LastWriteTime -lt $del_date } |  Move-Item -destination "f:\delete"
}

它将它移动到另一个目录的原因是因为there’s apparently a bug in recursive deletes,我的数据是很多,很多子目录很深,所以一旦我把所有东西都移到了kill目录,我运行它:

del /f/s/q f:\delete > nul
rmdir /s/q f:\delete

如果您没有这个问题,可以将其添加到PowerShell的上述位置的末尾:

$del_dir = "f:\delete"
$fso = New-Object -ComObject scripting.filesystemobject
$fso.DeleteFolder($del_dir)

猜你在找的Windows相关文章