Powershell 找不到位置参数
我不确定为什么会出现以下错误Powershell 找不到位置参数,powershell,Powershell,我不确定为什么会出现以下错误 Copy Item:找不到接受参数“C:\code\PS\Auths\2.jpg”的位置参数。 在C:\Code\PS\auth grab.ps1:9 char:12 C:\Code\PS\Auths\2.jpg是正确的路径。 (我正在为管道中的每个项目获取一个) 当我回显$rv时,我得到了正确的路径,$\应该是正确的。我哪里做错了 下面是oops脚本: function Generate-FileName($fi) { $rv = "
Copy Item:找不到接受参数“C:\code\PS\Auths\2.jpg”的位置参数。 在C:\Code\PS\auth grab.ps1:9 char:12
C:\Code\PS\Auths\2.jpg是正确的路径。 (我正在为管道中的每个项目获取一个) 当我回显$rv时,我得到了正确的路径,$\应该是正确的。我哪里做错了 下面是oops脚本:注意:如果我回显$rv,我会得到我想要的路径将函数包装在括号中如下-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 $_) }
将其括在括号中会强制执行 或ForEach-Object { Copy-Item $_ -destination (Generate-FileName(Get-ChildItem $_)) }
复制变量中函数的返回值,并在复制项中使用变量,如下所示-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 }
我认为您的函数不会返回任何内容 我认为您的脚本会使用复制项生成此行:Generate FileName
试着这样做: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 }
您应该发布来自文件的代码完全忘记发布代码了,文件名或参数中的空格不是有问题吗?文件名中没有空格您是否尝试过在编写主机$\fullname和$\name时回显$\u…以确保使用正确的路径?我不这么认为。这只是功能评估的问题。我在Powershell ISE中尝试了相同的示例。@AngshumanAgarwal我认为我找到了正确的解决方案。您在上一次编辑中添加了auth grab.ps1
ing,这就是我的建议(首先是在评论中),这就是解决问题的方法……您可以尝试您所说的内容,而不修改任何其他内容,除了您所建议的内容,并在ISE中运行John的完整代码。此外,你也可以阅读John的评论-是的,移除$rv而不返回它是有效的。e、 函数生成文件名($fi){“C:\Code\PS\New\”+$fi.Name}它不仅返回。这也是调用函数的方式。此外,不需要$rv。那只是为了调试的目的。我明白了。但是我有一个问题:return
和函数生成文件名($fi){“C:\code\PS\New\”+$fi.Name}
之间有什么区别?我们不需要像在C风格函数中那样使用return关键字。任何具有输出的表达式和语句都将有助于函数的输出。因此,上面我们只需要输出“C:\Code\PS\New\”+$fi.Name。要获得更深入的理解,请阅读此处“调用”标题下的“函数输出”包含所有未捕获的内容。您可能根本不想保留$rv。只要有这个&try[我没有试过这个部分]-“C:\Code\PS\New\”+$fi.name我有$rv的唯一原因就是回显它。是的,我想是为了调试这个值。但是,在生产脚本中,您可能不需要它。这就是我的意思。是的,移除$rv而不归还它是有效的。e、 g.函数生成文件名($fi){“C:\Code\PS\New\”+$fi.Name}函数生成文件名($fi){$rv=“C:\code\PS\New\”+$fi.Name;return$rv}