我不确定为什么我收到以下错误
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,我会得到我想要的路径
答案 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
}