2017-03-01 33 views
0

我試圖根據Get-Date的時間戳的小時將文件複製到與從filename_10_00.ext結構中的另一個來源保存的文件相匹配的文件。如果我使用24小時的時間,我可以使用Get-Date小時來確定我正在查找哪個文件。 (這是運行每小時備份)僅複製與可變字符串匹配的文件

這是我有:

$current_time = Get-Date 
$hour_var = $current_time.Hour 
Get-ChildItem -Path \\Path\To\Source | Where-Object { 
    $_.Name -match "$hour_var" 
} | Copy-Item -Destination \\Path\To\Destination 

有人可以告訴我爲什麼它似乎無法匹配基於PowerShell的我提供?

我正在尋找純理想的PowerShell沒有導入模塊。

+0

請出示的'GET-ChildItem -Path \\路徑\爲\ Source'樣本輸出以及'Get-ChildItem -Path \\ Path \ To \ Source |的所需和實際輸出Where-Object {$ _。Name -match「$ hour_var」}'。 –

+0

不幸的是,沒有樣本輸出。所需的輸出是使用$ hour_var作爲正則表達式來掃描「filename_hh_mm_ss.ext」的所有文件,以比較從$ hour_var返回的小時與從文件名到hh的小時。 –

+0

如果'Get-ChildItem -Path \\ Path \ To \ Source'沒有產生任何輸出,爲什麼你驚訝沒有任何東西被複制? –

回答

1

在小時格式假設前導零試試這個:

$Src = "\\Path\To\Source" 
$Dst = "\\Path\To\Destination" 

$CurrHour = (Get-Date).Hour.ToString('00') 
Get-ChildItem -Path $Src *_??_??.ext | 
    Where-Object BaseName -match "^.*_$CurrHour_\d{2}$" | 
    Copy-Item -Destination $Dst -whatif 

如果輸出看起來OK刪除-whatif

+0

後,我在寫入主機$ test後可以看到該文件夾​​中的文件。使用此示例似乎不會在-whatif上產生任何輸出,並且移除-whatif看起來並不像複製任何東西。我已經使用實際的源和目標路徑以及文件擴展名對其進行了修改,以提供更準確的示例。 Src和Dts是PC上的共享文件夾,我以管理員身份運行。 '$ SRC = 「\\ WIN-F4GLTG2LGVN \源」'' $ Dst的= 「\\ WIN-F4GLTG2LGVN \目的地」' '$ CurrHour =(獲取最新).Hour.ToString('00 ')' 'Get-ChildItem -Path $ Src filename _ ?? _ ??。txt | Where-Object BaseName -match「^ filename_ $ CurrHour_ \ d {2} $」| Copy-Item -Destination $ Dst -whatif' –

+0

您是否修改了僞文件名以符合您的環境? – LotPings

+0

我沒有,但我更擔心共享文件夾可能會導致問題比文件名,所以我希望他們更嚴格。出於測試目的,filename_12_00.txt將是一個合法的例子。 –