天天看點

<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,如需轉載請自行聯系原作者