簡體   English   中英

Powershell從最新目錄獲取文件

[英]Powershell get file from latest directory

我正在嘗試編寫一個腳本,以從使用昨天的日期命名的文件中獲取行,並將這些行發送到文件中。 訣竅是我必須搜索最新創建的目錄,因為根目錄中有許多目錄。

我有一個根目錄C:\\Orders包含許多名為Orders 2014.01.02Orders 2014.01.04Orders 2014.01.06等的子目錄,包含數千個txt文件,在一個特定的orders.txt我這樣寫:

2014.01.02 Shipping order cost ....
2014.01.02 Order by phone
2014.01.03 Prepaid ..
etc ..

因此,我需要一個腳本,該腳本轉到最近一天的Orders目錄,比如說Orders 2014.01.06 ,並將復制以前一天的日期開頭的所有行並將其發送給我。

我設法制作了一個腳本來從最新目錄的文件中獲取行,並使用此腳本通過帶有附件的郵件將其發送給我:

Get-Content "C:\Orders\Orders 2014.01.06\orders.txt" | Where-Object {$_.StartsWith((Get-Date).AddDays(-1).ToString("yyyyMMdd"))} | Out-File "C:\Orders\Result_orders.txt"

事實是,這並不靈活,因為每次有新文件夾時,我都必須手動更改該行中的最新子文件夾。

我還有另一行代碼,向我顯示了根文件夾中的最新子文件夾:

gci C:\Orders | where-object { $_.PSIsContainer} | sort CreatiionTime -desc | select -f 1

此行顯示了我要獲取結果的最新日期的文件夾。 問題是我無法使兩個行都在腳本中工作。 我曾嘗試將它們合並,但無法做到。 我試圖使第二個命令作為變量,如:

$since_folder = gci C:\Orders\ | where-object { $_.PSIsContainer} | sort CreatiionTime -desc | select -f 1 

然后從腳本的第一行調用它,例如:

Get-Content "$since_folder\orders.txt" | Where-Object {$_.StartsWith((Get-Date).AddDays(-1).ToString("yyyyMMdd"))} | Out-File "C:\Orders\Result_orders.txt"

但它似乎不正確,並且不起作用。 實際上,在運行上一個腳本后,我會收到一封電子郵件,但沒有附件。 我只有在跑步時才能得到它:

Get-Content "C:\Orders\Orders 2014.01.06\orders.txt" | Where-Object {$_.StartsWith((Get-Date).AddDays(-1).ToString("yyyyMMdd"))} | Out-File "C:\Orders\Result_orders.txt"

誰能幫我這個腳本,這可能很簡單,但我在這里遇到了麻煩。

以下將返回當前文件夾中最近創建的目錄的名稱:

Get-ChildItem -Directory | sort -Descending -Property CreationTime | select -first 1 name
$since_folder = gci C:\Orders\ |
    where { $_.PSIsContainer } |
    sort CreationTime -desc |
    select -f 1

$filename = [System.IO.Path]::Combine( $since_folder.FullName, "orders.txt" ) # ends up with c:\orders\Orders 2014.10.21\orders.txt

Get-Content $filename |
    where { $_.StartsWith((Get-Date).AddDays(-1).ToString("yyyyMMdd")) } |
    Out-File "C:\Orders\Result_orders.txt"

這使您脫離了硬編碼路徑。

以下內容檢索最新創建的目錄,過濾“ orders.txt”,然后根據提供的更新模式檢索與昨天的日期匹配的行:

gci "C:\Orders" |
  Where-Object { $_.PSIsContainer} |
  sort CreationTime -desc |
  select -f 1 |
  gci -Filter "orders.txt" |
  Get-Content |
  Where-Object { $_.StartsWith((Get-Date).AddDays(-1).ToString("yyyyMMdd")) } |
  Out-File "C:\Orders\Result_orders.txt"

PowerShell 3允許直接在Get-ChildItem中過濾目錄:

gci "C:\Orders" -Directory |
  sort CreationTime -desc |
  select -f 1 |
  gci -Filter "orders.txt" |
  Get-Content |
  Where-Object { $_.StartsWith((Get-Date).AddDays(-1).ToString("yyyyMMdd")) } |
  Out-File "C:\Orders\Result_orders.txt"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM