无法找到位置参数

时间:2012-06-11 14:18:32

标签: powershell

我不确定为什么我收到以下错误

Copy-Item : A positional parameter cannot be found that accepts argument 'C:\Code\PS\Auths\2.jpg'. At C:\Code\PS\auth-grab.ps1:9 char:12

C:\ Code \ PS \ Auths \ 2.jpg是正确的路径。

(我正在为管道中的每个项目获取其中一个)

当我回复$ rv时,我得到正确的pathand $ _应该是正确的。我哪里错了?

下面的oops脚本:

function Generate-FileName($fi)
{           
    $rv = "C:\Code\PS\New\"+ $fi.Name
    #echo rv    
}

Get-ChildItem Auths\*.* -include 1.jpg, 2.jpg | 
ForEach-Object {        
    Copy-Item $_ -destination Generate-FileName(Get-ChildItem $_)       
}

请注意,如果我回显$ rv,我会得到我想要的路径

2 个答案:

答案 0 :(得分:3)

将此功能 - Generate-FileName 包装在括号中,如下所示 -

ForEach-Object {        
    Copy-Item $_ -destination (Generate-FileName(Get-ChildItem $_))      
}

将它括在括号中会强制expression


复制函数的返回值并使用Copy-Item中的变量 -

function Generate-FileName($fi)
{           
    "C:\Code\PS\New\"+ $fi.Name
}

Get-ChildItem Auths\*.* -include 1.jpg, 2.jpg | 
ForEach-Object {   
    $destination =  Generate-FileName(Get-ChildItem $_)           
    Copy-Item $_ -destination $destination
}

答案 1 :(得分:0)

我认为你的函数Generate-FileName不会返回任何内容。

我认为您的脚本会使用copy-item生成此行:

Copy-Item C:\Code\PS\Auths\2.jpg -destination 

试试这样:

function Generate-FileName($fi)
{           
    $rv = "C:\Code\PS\New\"+ $fi.Name
    return $rv # here is the change
}