Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 找不到位置参数_Powershell - Fatal编程技术网

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脚本:

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,我会得到我想要的路径

将函数包装在括号中如下-

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
}

您应该发布来自
auth grab.ps1
文件的代码完全忘记发布代码了,文件名或参数中的空格不是有问题吗?文件名中没有空格您是否尝试过在编写主机$\fullname和$\name时回显$\u…以确保使用正确的路径?我不这么认为。这只是功能评估的问题。我在Powershell ISE中尝试了相同的示例。@AngshumanAgarwal我认为我找到了正确的解决方案。您在上一次编辑中添加了
return
ing,这就是我的建议(首先是在评论中),这就是解决问题的方法……您可以尝试您所说的内容,而不修改任何其他内容,除了您所建议的内容,并在ISE中运行John的完整代码。此外,你也可以阅读John的评论-是的,移除$rv而不返回它是有效的。e、 函数生成文件名($fi){“C:\Code\PS\New\”+$fi.Name}它不仅返回。这也是调用函数的方式。此外,不需要$rv。那只是为了调试的目的。我明白了。但是我有一个问题:
函数生成文件名($fi){“C:\code\PS\New\”+$fi.Name}
函数生成文件名($fi){$rv=“C:\code\PS\New\”+$fi.Name;return$rv}
之间有什么区别?我们不需要像在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}