天天看点

<Power Shell>09 利用powershell 查找旧文件

HI ,大家好。

当我们谈到利用PowerShell中找到旧文件

我们的第一反应就是其中涉及减去DateTime对象或使用比较操作符。

例如,如果我们要删除超过14天所有文件,我们可以试一下。

每个FileInfo对象LastWriteTime属性大于一个DateTime对象并且减去14天

1

2

3

4

<code>PS&gt; </code><code>$date</code> <code>= (</code><code>Get-Date</code><code>).AddDays(-14)</code>

<code>PS&gt; </code><code>Get-ChildItem</code> <code>-Path</code> <code>D:\Temp</code> <code>-Recurse</code> <code>|</code>

<code>    </code><code>Where-Object</code> <code>{</code><code>-not</code> <code>$_</code><code>.PsIsContainer </code><code>-and</code> <code>$_</code><code>.LastWriteTime </code><code>-gt</code> <code>$date</code> <code>} |</code>

<code>    </code><code>Remove-Item</code> <code>-WhatIf</code>

在上面的小例子中,我们在过去的某一天中初始化了$data(日期),当旧的文件被我们发现时候是基于lastwritetime属性,它是通过对象删除项的cmdlet

虽然这样,但是还不是我们想要得到的,因为上面的例子并没有准确的说明时间。我们可以创建一个列表,并且创建一个新的属性

请看下面这个例子

<code>PS&gt; </code><code>$age</code> <code>= @{Name=</code><code>'Age(Days)'</code><code>;Expression={((</code><code>Get-Date</code><code>) - </code><code>$_</code><code>.LastWriteTime).Days}}</code>

<code>PS&gt; </code><code>Get-ChildItem</code> <code>| </code><code>Select-Object</code> <code>-Property</code> <code>Name,FullName,</code><code>$age</code>

现在我们得到了三列的输出显示表,包括每个目录的时间和每个文件

我们所使用的是从当前的date减去lastwritetime,这会产生出一个新的timespan对象,然后我们调用日期属性来得到我们想要的结果。

但是如果我们对于新的时间间隔对于文件系统对象,会得到上面执行后相同的结果吗?好,cantgis 带大家试一试。

5

6

7

8

9

10

11

12

<code>PS&gt; </code><code>Get-ChildItem</code> <code>-Path</code> <code>$env:WINDIR</code><code>\system.ini | </code><code>New-TimeSpan</code>

<code>Days              : 137</code>

<code>Hours             : 4</code>

<code>Minutes           : 34</code>

<code>Seconds           : 54</code>

<code>Milliseconds      : 274</code>

<code>Ticks             : 118532942742544</code>

<code>TotalDays         : 137.190905952019</code>

<code>TotalHours        : 3292.58174284844</code>

<code>TotalMinutes      : 197554.904570907</code>

<code>TotalSeconds      : 11853294.2742544</code>

<code>TotalMilliseconds : 11853294274.2544</code>

好的,大家看到了system.ini的天数是137天 ,我们接下来进一步的了解的查看新的时间间隔参数(timespan)

<code>PS&gt; (</code><code>Get-Command</code> <code>New-TimeSpan</code><code>).Parameters[</code><code>'Start'</code><code>]          </code>

<code>Name            : Start</code>

<code>ParameterType   : System.DateTime</code>

<code>ParameterSets   : {</code><code>[Date, System.Management.Automation.ParameterSetMetadata]</code><code>}</code>

<code>IsDynamic       : False</code>

<code>Aliases         : {LastWriteTime}</code>

<code>Attributes      : {System.Management.Automation.AliasAttribute, Date}</code>

<code>SwitchParameter : False</code>

这里讲一下这个lastwritetime的别名定义

如果传入对象有一个属性:名称

它将会自动绑定到start参数 (而对于我们操作用户来讲,这将非常工整)

所以cantgis 基于上面写一个非常简短的表达

<code>PS&gt; </code><code>$age</code> <code>= @{Name=</code><code>'Age(Days)'</code><code>;Expression={(</code><code>$_</code> <code>| </code><code>New-TimeSpan</code><code>).Days}}</code>

希望大家能够喜欢Cantgis 今天带给大家关于新参数timespan、lastwritetime 的介绍和使用,查找到老旧文件。

     本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1228301,如需转载请自行联系原作者