2017-05-23 42 views
1

部分我的脚本如下所示:布展物料路径作为变量

move-item -path $_.FullName+"\*.7z" -destination "$destination" 

返回错误:

Move-Item : A positional parameter cannot be found that accepts argument '+*.7z'. At line:32 char:4 + move-item -path $_.FullName+"*.7z" -destination "$destin ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Move-Item], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.MoveItemCommand

但是,如果我改变变量精确值,即工作:

move-item -path "D:\test1\test2\test3\test4\*.7z" -destination "$destination" 

什么问题?

回答

3

要使用表达作为命令行的一部分 - 这是在参数模式解析 - 你必须强制一个新的解析方面(...)

Move-Item -path ($_.FullName+"\*.7z") -destination "$destination" 

Get-Help about_Parsing


在这种情况下,考虑到表达式构建字符串值,使用膨胀(内插)串具有嵌入式子表达式($(...))是一种可行的替代方案,如图Ben Richard's answer

0

要做你想做的事,你可以在一个字符串中使用一个表达式,而不要进行字符串连接。

# $_.FullName is an expression 
# so to have used inside the quotes, you need to wrap it with $() 
Move-Item "$($_.FullName)\*.7z" $destination 
+1

谢谢你的代码片段,它可能会提供一些即时的帮助。通过展示*为什么*这是一个很好的解决方案,对未来的读者会有更好的解决方案,这将为它的教育价值提供一个合适的解释[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –