这里向你们提出挑战:
我需要一些方法(最好是内置的,但也可以考虑使用 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。