列出特定级别的子文件夹,并带有修改日期

Isz*_*szi 6 powershell report windows-xp

给你们的挑战,在这里:

我需要一些方法(最好是内置的,但也可以考虑 F/OSS 第三方应用程序)来生成某个级别的子文件夹列表,以及(或者,更好地,过滤)它们的“修改日期”。请注意,我需要的文件夹列表-输出应排除文件。

例子:

对于文件夹结构:

C:
\---Reports
    +----Task1
    |    \----Report1
    |         +----CSV
    |         +----HTML
    |         \----XML
    +----Task2
    |    +----Report1
    |    |    +----CSV
    |    |    +----HTML
    |    |    \----XML
    |    +----Report2
    |    |    +----CSV
    |    |    +----HTML
    |    |    \----XML
    |    \----Report3
    |         +----CSV
    |         +----HTML
    |         \----XML
    \----Task3
         +----Report1
         |    +----CSV
         |    +----HTML
         |    \----XML
         \----Report2
              +----CSV
              +----HTML
              \----XML
Run Code Online (Sandbox Code Playgroud)

我希望列表具有类似于以下内容的信息:

PATH                         | MODIFIED
=============================|==========
C:\Reports\Task1\Report1     | 6/23/2011
C:\Reports\Task2\Report1     | 6/17/2011
C:\Reports\Task2\Report2     | 6/30/2011
C:\Reports\Task2\Report3     | 7/06/2011
C:\Reports\Task3\Report1     | 6/22/2011
C:\Reports\Task3\Report2     | 7/13/2011
Run Code Online (Sandbox Code Playgroud)

(请注意排除高于或低于“报告#”文件夹级别的文件夹。)

或者,理想情况下,我想要一些可以生成这样的报告的东西:

PATH                         | MODIFIED
=============================|==========
C:\Reports\Task1\Report1     | 6/23/2011
C:\Reports\Task2\Report1     | 6/17/2011
C:\Reports\Task2\Report2     | 6/30/2011
C:\Reports\Task3\Report1     | 6/22/2011
=============================|==========
TOTAL                        |         4
Run Code Online (Sandbox Code Playgroud)

(请注意,这代表先前列表的过滤版本,仅限于特定日期范围。)

这将在 Windows XP/2003 中完成。PowerShell 可用。同样,我更愿意使用可用的内置实用程序,但也可以考虑 F/OSS 工具。

Chr*_*s S 9

电源外壳:

gci C:\Reports\*\* | where {$_.LastWriteTime -gt ((get-date)- (new-timespan -day 7))} | select FullName,LastWriteTime | ft
Run Code Online (Sandbox Code Playgroud)

稍微分解一下:

gci(又名get-childitem)做它听起来像的事情,将提供的文件系统路径视为一个对象,并从中提取子项(文件或文件夹)。

这将通过管道传输到where语句,该语句具有单个过滤器函数作为参数。

过滤器函数是一个“简单”的比较,在这种情况下 {A -gt B} = "True if A is Great Than B"。第一部分是$_.LastWriteTime获取从管道传递的每个对象并拉出 LastWriteTime 属性。最后一部分是相对日期结构;PS中没有什么是超级简单的。日期事物的第一部分获取当前日期,然后从该数字中减去一段时间(在本例中,我正在创建一个包含 7 天值的新日期对象;所以现在减去 7 天将给出日期7 天前)。

从那些通过where过滤的对象中,我只提取了 FullName 和 LastWriteTime 属性,因为这是我们关心的全部。

最后它通过管道传输到format-table(又名ft)命令,因此它制作了一个漂亮的表格,如下所示:

FullName                           LastWriteTime
--------                           -------------
C:\Reports\Task1\Report1           7/11/2011 10:00:00 AM
C:\Reports\Task2\Report1           7/10/2011 5:00:00 AM
C:\Reports\Task2\Report2           7/6/2011 9:00:00 PM
C:\Reports\Task4\Report7           7/4/2011 3:00:00 PM
Run Code Online (Sandbox Code Playgroud)

要获得所有这些的计数,请像这样将上面的命令括起来:((mess_from_above_less_the_ft_part).count必须去掉“| ft”部分,否则它会添加 4 行表格格式进行计数,并将您的计数减少 4。