Get file with specified date
Reference:
- DateTime.ParseExact()
- System.DateTime ParseExact
- PowerShell PowerShell 語法說明/範例教學
- Using the Get-ChildItem Cmdlet
- Windows PowerShell -Recurse Parameter
Example:
下面這段程式碼是用來取指定目錄裡的特定檔案(在這我們是指定日期)
# $TargetFiles1 : 儲存我們指定日期的所有檔案路徑
# $TargetDir1 : 來源資料夾
# $Extension : 所要的檔案類型,"*.log", ".txt", ...
# $_.LastWriteTime : 檔案的時間
$TargetFiles1 = @(Get-ChildItem $TargetDir1 -recurse -include $Extension | Where { ($_.LastWriteTime -ge ([DateTime]::ParseExact($LastDtStr1, 'yyyy/MM/dd', $null))) -and ($_.LastWriteTime -lt ([DateTime]::ParseExact($LastDtStr2, 'yyyy/MM/dd', $null))) } )
Powershell:
1. @
陣列內容的外面應附加 @ 記號。
2. where where 陳述式採用下列語法:
代碼:
cmd1 | where {<測試1 [<連結>
<測試2>]...}
3.
運算子(不區分大小寫) | 意義 |
---|---|
-eq | 相等 |
-lt | 小於 |
-gt | 大於 |
-le | 小於或等於 |
-ge | 大於或等於 |
-ne | 不相等 |
-not | 邏輯 not (別名為 !) |
-and | 邏輯 and |
4. DateTime.ParseExact() Example:
$provider = New-Object System.Globalization.CultureInfo "en-US"
[DateTime]::ParseExact($line.date, "dd/MMM/yyyy:hh:mm:ss zz00", $provider)
5. -include
For example, the -include and -exclude parameters make it easy to retrieve a specific set of items from a location. Suppose you want information about only the .txt and .log files found in the folder C:\Scripts? That’s easy:
Get-ChildItem c:\scripts\*.* -include *.txt,*.log
6. -recurse
The PowerShell -recurse parameter is used for persuading Get-ChildItem to search subdirectories.
7. PowerShell PipeLine 命令管線
PowerShell 允許您將兩個以上的命令組合成單一自訂命令,而建立所謂的管線作業。在管線中鏈結命令後,命令之間彼此傳遞的資料即為物件。第一個命令會將傳回 的一或多個物件沿管線向下傳遞給第二個命令。第二個命令會先處理這些物件,再將新物件或修改後的物件傳遞給第三個命令。這種情形將持續發生,直到管線 中的每個命令都已執行完成。
若要鏈結命令以組合成單一管線,請依命令的執行順序指定每個命令。命令之間必須 以管線符號 (|)分隔,也就是垂直線。命令的執行順序為由左至右,以單次作業方式 沿管線向下傳遞所需的物件。
以下範例示範如何將命令組合成單一管線:
Get-ChildItem *.txt | where {$_.length -gt 100} |
Format-Table name, length
第一個命令 (Get-ChildItem *.txt)從目前工作位置擷取所有的文字檔。此命令將每個檔案的相關資料以物件型式傳遞給第二個命令 (where {$_.length -gt 100})。
第二個命令則擷取這些物件,然後依據 length 屬性來篩選物件。接著此命令會將 length 值大於 100 位元組的每個物件,沿管線向下傳遞給第三個命令 (Format-Table name)。
第三個命令收到這些物件後,將以表格格式顯示檔案 的名稱。
請注意在第二個命令中,length 屬性前面加上了$_變數。這個變數是由 PowerShell 自動建立,用於儲存目前的管線物件。依此推論,您可以使用這個變數呼叫管線物件的屬性 (變數名稱和屬性名稱之間必須以句號分隔)。