无法使用cd 与${function:cd..}对比:

问题描述

在使用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\RobertInspiron14被解释为单独的参数

这两个参数都不是有效目录的路径,因此cd(或者更确切地说是Set-Location的别名cd)引发错误。

您可以通过使用引号将其边界限定为C:\Users\Robert Inspiron14和{{1}都起作用),以强制PowerShell将"识别为单个字符串参数:

'

您可以阅读有关about_Parsing help topic

中PowerShell如何解析命令表达式的更多信息。 ,

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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...