列出某一级别的子文件夹,并附上修改日期

列出某一级别的子文件夹,并附上修改日期

这里向你们提出挑战:

我需要一些方法(最好是内置的,但也可以考虑使用 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

我希望列表包含类似以下内容的信息:

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

(请注意排除“Report#”文件夹级别之上或之下的文件夹。)

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

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

(请注意,这是之前列表的过滤版本,限制在特定的日期范围内。)

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

答案1

电源外壳:

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

稍微分解一下:

gci(又名get-childitem) 的作用正如其名,将提供的文件系统路径视为对象并从中提取子项(文件或文件夹)。

它被传送到where语句,该语句有一个过滤函数作为它的参数。

过滤函数是一个“简单”比较,在本例中,{A -gt B} = “如果 A 大于 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

要获得所有这些的数量,请将上述命令括起来如下:((mess_from_above_less_the_ft_part).count必须删除“| ft”部分,否则它会添加 4 行需要计数的表格格式,并会使计数减少 4。

相关内容