将项目路径移动为变量

时间:2017-05-23 20:40:06

标签: powershell

我的部分脚本如下所示:

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

它返回错误:

  

Move-Item:找不到接受的位置参数   争论' + *。7z'。在行: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"

有什么问题?

2 个答案:

答案 0 :(得分:3)

要将表达式用作命令行的一部分 - 在参数模式中进行解析 - 您必须使用{强制使用新的解析上下文 {1}}:

(...)

请参阅Get-Help about_Parsing

在这种情况下,假设表达式正在构造字符串值,则使用带有嵌入式子表达式(Move-Item -path ($_.FullName+"\*.7z") -destination "$destination" )的可扩展(插值)字符串是一个可行的替代方案,如Ben Richard's answer所示。

答案 1 :(得分:0)

要执行您想要的操作,您可以在字符串中使用表达式,而无需进行字符串连接。

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