问题描述
在使用PowerShell前进时遇到问题。我可以上移目录,但不能下移。情况如下:
我打开PowerShell,然后输入“ pwd”命令,这表明我当前在 PS C:\ Users \ Robert Inspiron14>
我键入命令“ cd ..”,现在移到 PS C:\ Users>
然后我尝试通过键入以下内容来更改目录:“ cd C:\ Users \ Robert Inspiron14”,但无法执行。不幸的是,由于缺乏声誉,我还无法发布图片。
我能够在CMD中执行更改,但不能在PowerShell中执行更改。另外,我不知道如何将用户从“ Robert Inspiron14”更改为“ Robert”。任何帮助表示赞赏!
解决方法
在PowerShell可以执行您的cd
命令之前,它需要先解析,然后PowerShell的解析器将这样解释您的命令:
cd C:\Users\Robert Inspiron14
\/ \_____________/ \________/
Command Name | |
argument 1 |
argument 2
换句话说,C:\Users\Robert
和Inspiron14
被解释为单独的参数。
这两个参数都不是有效目录的路径,因此cd
(或者更确切地说是Set-Location
的别名cd
)引发错误。
您可以通过使用引号将其边界限定为C:\Users\Robert Inspiron14
和{{1}都起作用),以强制PowerShell将"
识别为单个字符串参数:
'
您可以阅读有关about_Parsing
help topic
为Mathias R. Jessen's helpful answer补充更多背景信息:
在所有外壳 中,引用包含空格的参数是一般语法上的必要性,因为 未加引号的空格用于分隔多个参数 。
不仅需要引用的空格,还包括PowerShell的任何所谓的元字符 (在不加引号的情况下,具有句法功能);例如,假设a;b
否则将被解释为语句分隔符,则将路径传递到原本名为;
的目录也需要引用。
有多种引用样式 :
-
因为您的路径是文字路径-它不包含变量引用或表达式-
'...'
-引号(单-引号)是最好的选择。
如果路径包含变量或子表达式,即,如果需要可扩展字符串(插值字符串),请使用"..."
引号( double 引号)。 [1]
有关PowerShell中字符串文字的概述,请参见this answer。 -
另一种较不常见的解决方案是分别使用
)转义空格字符`
(PowerShell的转义字符:cd C:\Users\Robert` Inspiron14
还请注意:
-
PowerShell的选项卡完成会根据需要自动应用报价。
-
cd..
是PowerShell中内置的功能的名称,其唯一目的是模拟{{1} }(可能是允许的)行为(请参见下文);该函数执行语法正确的cmd.exe
调用(通过执行Set-Location ..
进行验证),并用空格分隔命令名和参数。
与${function:cd..}
对比:
不幸的是, cmd.exe
的内置cmd.exe
命令决定 not 强制执行其通常的语法规则,并启用了例如cd
。
它不应该这样做:乍一看虽然很方便,但它却构成了通常会引起混乱的有问题的例外。
请注意,cd C:\Program Files
的制表符完成正确地引用了包含空格的参数。
类似地,很遗憾,允许 cmd.exe
作为正确的cd..
的语法例外选择-有关详细信息,请参见this answer上的评论。
[1]注意cd ..
-如果在路径中使用 variable 引用(只要使用任何 literal ,则不必严格引用)组件不需要报价;例如,"..."
可以不加引号,而$HOME\foo
周围的"
是必需的。对于子表达式($(...)
),rules get more complicated是最简单的方法,就是始终使用"$HOME\foo bar"
对其进行引用。 / sup>