如果子文件夹存在且包含早于特定日期的文件,则配置文件删除文件夹

时间:2015-01-14 01:47:40

标签: powershell

我已经挖了但是还没有遇到一些东西,这些东西正在朝着正确的方向推动我,这个脚本会执行以下操作:

   -enumerate over a folder of profiles
   -check a one level down to see if a certain subfolder exists    
   -if it exist
          -check last modified date 
              -if older than jan 1, 2015, delete files AND the folder 
                  -write the user's profile name and files deleted to a log file
              -if not older than jan 1, 2015, do not delete
                  -write the user's profile name to a log file

文件结构如下所示

-profiles
    -name1
        -folder1
             -folder2
                 fileOlderThanXDate.old
    -name2
        -folder1
            -folder2
                fileNewerthanXdate.new
    -name3
        -folder1

因此,在配置文件中,搜索到名称1,然后搜索到文件夹1 [每个人都会有],如果有文件夹2,检查文件中的lastModifiedDate,如果旧,删除文件,和文件夹2,然后写name1和那些文件到日志。 继续使用name2,似乎是folder1中的folder2,但文件较新,然后只需将name2写入另一个日志。 继续名称2,文件夹1中没有文件夹2,继续

我找到文件夹中的所有提示和碎片并删除,如果找到一个文件,如果超过x天,删除,但没有任何我可以把拼图的各个部分放在一起。这是一个问题的承担,但欣赏任何方向的任何推动...否则,它将很多点击和删除对我来说。

1 个答案:

答案 0 :(得分:1)

您需要的是一个简单的ForEach循环和Test-Path cmdlet(假设PSv3或更高版本)。我还使用Split-Path输出日志。

Switch(Get-ChildItem C:\Users -Directory|Select -Expand FullName){
    {!(Test-Path $_\Folder1\Folder2)}{Continue}
    {Test-Path $_\Folder1\Folder2\* -OlderThan "10/01/2014 12:00 AM"}{Split-Path $_ -Leaf|Out-File Old.txt -Append;Remove-Item $_\Folder1\Folder2 -Recurse -Force;continue}
    default {Split-Path $_ -leaf | Out-File NotOld.txt -Append}
}

编辑:我在第二个切换条件的路径末尾添加了\*,因此它会查看Folder2中的文件而不是查看Folder2的修改日期。现在它将查看文件夹中的任何文件是否旧,如果它们是删除整个文件夹并将名称输出到Old.txt日志文件。