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

Profile delete folder if a subfolder exists and contains files older than a certain date

我已经四处寻找,但还没有找到一些可以将我推向正确方向的脚本,该脚本将执行以下操作:

   -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写到不同的日志里就行了。 继续name2,文件夹1中没有文件夹2,继续

我找到了所有提示和碎片来文件夹文件夹并删除,找到超过 x 天的文件,删除,但我无法将拼图拼凑在一起。这是一个问题,但感谢任何方向的推动......否则,我将需要大量的点击和删除。

您需要的是一个简单的 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 日志文件。