2013-04-10 83 views
2

我想使用PowerShell(v.1)僅複製匹配模式的文件。該文件命名規則爲:PowerShell複製項目方法失敗 - 文件夾中的括號

Daily_Reviews[0001-0871].journal 
Daily_Reviews[1002-9887].journal 
[...] 

當我運行它,方法「複製項目」抱怨:

爲cmdlet的動態參數,無法檢索。指定通配符模式無效:Daily_Reviews [0001-0871] .journal
+拷貝項目< < < < $ $的資源文件目的地

的錯誤是由於 「[」 和 「]」 中的文件名稱。當我刪除左右括號時,它按預期工作。但看起來像PowerShell 1沒有-LiteralPath標誌,所以有另一種方法讓Copy-Item在包含括號的文件名的PowerShell 1中工作嗎?

$source = "C:\Users\Tom\" 
$destination ="C:\Users\Tom\Processed\" 

if(-not(Test-Path $destination)){mkdir $destination | out-null} 


ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d\d\d\d-\d\d\d\d\].journal" })) 
{ 

    Copy-Item $sourcefile $destination 
} 

回答

1

$_引用當前引用的參數;你不能以你在這裏的方式使用它,因爲這不在管道之中。

$source = "C:\Users\Tom\" 
$destination ="C:\Users\Tom\Processed\" 

if(-not(Test-Path $destination)){mkdir $destination | out-null} 


ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d\d\d\d-\d\d\d\d\].journal" })) 
{ 

    Copy-Item -literalpath $sourcefile $destination 
} 
+0

謝謝。我做出了你所建議的改變,並且我從Copy-Item中得到了同樣確切的投訴......奇怪的東西。我想知道它是否是文件名中的括號? - – Slinky 2013-04-10 16:19:43

+0

這是因爲文件名中的「[」和「]」。當我刪除左右括號時,它按預期工作。需要能夠使用括號解析文件 – Slinky 2013-04-10 16:25:31

+2

方括號要求在調用'copy-item'時使用'-literalpath'(總是想知道什麼時候需要)。我修改了我的代碼。 – alroc 2013-04-10 16:40:39

4

好,研究這個更長時間後我找到了一個解決辦法:

$src = [Management.Automation.WildcardPattern]::Escape($sourcefile) 
Copy-Item $src $destination 
相關問題