cd程序文件错误:找不到位置参数

时间:2018-07-21 19:12:56

标签: powershell

PS C:\> cd Program Files

当我发出此命令时,我不知道为什么,但是它不接受Program Files。相同的命令在cmd中工作正常。

这是显示的错误:

Set-Location : A positional parameter cannot be found that accepts argument 'Files'.
At line:1 char:1
+ cd Program Files
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-Location], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

3 个答案:

答案 0 :(得分:4)

原因是语法无效。 powershell命令的每个参数都由空格分隔,因此您实际上正在执行以下操作:

UIView

但是Set-Location -Path Program -Arg2 Files (别名为Set-Location)没有第二个位置的位置参数,因此它无法将其绑定到任何参数并在命令中使用它,因此会出现终止错误


如果您想要一个更简单的cd别名,则可以执行以下操作(在您的cd中):

$profile

但是请注意,如果您未指定相对路径(function ChangeDirectory { param( [Parameter( Position = 0, Mandatory, ValueFromRemainingArguments )] [string[]] $Path ) Set-Location -Path ($Path -join ' ') } Set-Alias -Name cd -Value ChangeDirectory ),它将使用当前驱动器的根路径(很可能是.\)。可以在函数中对此进行调整,以测试两个位置(相对位置和驱动器根),但是弄​​清楚如果两个位置都存在,则要弄清楚要使用哪个位置的逻辑很麻烦(或者可以始终默认为相对位置)。

答案 1 :(得分:2)

TheIncorrigible1's helpful answer中所述,Program Files被解析为两个参数,因为空格用于分隔命令行参数。

您尝试使用cd Program Files的方法可能受cmd.exe(旧式命令提示符)的启发,该语法确实有效。但是,即使在概念上,它也违反了参数解析的通常规则。

因此,您需要使用 quoting 形式,以便将包含空格的值作为单个参数传递

您可以通过多种方法来实现此报价:

  • 在{em>文字的值附近使用'...' ,即应原样使用。

  • 在要嵌入变量引用(例如"...")或子表达式的值中使用$HOME (例如$(Get-Date)

  • 使用`引用(转义)单个字符。

因此,您可以使用以下任何一种方式:

cd 'Program Files'
cd "Program Files"  # as there are no $-prefixed tokens, the same as 'Program Files'
cd Program` Files   # `-escape just the space char.

此外,正如LotPings在评论中提到的,您可以使用 tab-completion 来扩展(无空格)前缀的em>路径,并隐含引用

例如,如果您在C:\中,并且输入:

cd Program<tab>

PowerShell自动完成以下命令:

 cd '.\Program Files\'

请注意,如何自动将Program Files(连同.\引用当前目录,并在末尾的\上指示目录)。

答案 2 :(得分:0)

cd C:\Program` Files\ 
  

`只是转义文件夹名称中的空格。