2013-04-10 113 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 
相关问题