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

2024-01-09

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

tl;dr

由于您的目录名称包含spaces, 你必须quote它,例如:

# Note: In PowerShell, 'cd' is an alias of 'Set-Location'
cd 'Program Files'

Alternatively, if the intent is to change to the well-known programs folder (typically,
C:\Program Files), you may reference the relevant environment variable https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Environment_Variables, in which case quoting is not required:[1]
cd $env:ProgramFiles instead of cd 'C:\Program Files'

下面讨论如何传递字符串literals以空格作为单个参数。


如中所述Maximilian Burszley 的有用回答 https://stackoverflow.com/a/51459512/45375, Program Files被解析为two参数,因为空格用于separate命令行参数。

Your attempt to use cd Program Files may be inspired by cmd.exe (the legacy Command Prompt), where this syntax indeed works; however, even there it conceptually violates the usual rules of argument parsing.

所以,你需要使用一种形式quoting为了传递一个值包含空格 as a single争论.

您有多种选择来实现此引用:

  • Use '...' around值是literals,即应该使用verbatim; a '...'字符串被称为verbatim(单引号)字符串 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Quoting_Rules#single-quoted-strings.

  • Use "..." around您想要嵌入的值变量引用 (e.g., $HOME) or 子表达式 (e.g., $(Get-Date);那是,"..."弦乐演奏字符串插值,他们被称为可扩展的(双引号)字符串 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Quoting_Rules#double-quoted-strings.

  • Use `引用(转义)asingle特点;`, 所谓的backtick, 是PowerShell的通用转义字符 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Special_Characters.

因此,您可以使用以下任意一种:

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

Also, 您可以使用制表符补全扩展(无空间)prefix包含空间的路径的完整形式隐式引用.

例如,如果您在C:\然后你输入:

cd Program<tab>

PowerShell 自动完成命令:

 cd '.\Program Files\'

请注意如何Program Files(随着.\引用当前目录。和一个尾随的\指示目录。)是自动单引号.


Using 通配符表达式作为参数:

如前所述,在 PowerShell 中cd是一个内置别名Set-Location https://learn.microsoft.com/powershell/module/microsoft.powershell.management/set-location cmdlet.

路过一条路位置上 - e.g. Set-Location 'C:\Program Files' - 隐式地将其绑定到-Path范围;就是这样,相当于Set-Location -Path 'C:\Program Files'

-Path将其论证解释为通配符表达式 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Wildcards,这样你就可以做类似的事情Set-Location C:\Win*为了改变为C:\Windows(假设通配符表达式仅匹配one目录)。

棘手的是 - 与cmd.exe- 这不仅仅是* and ?在 PowerShell 通配符表达式中具有特殊含义,但是[ and ]以及(对于字符集和字符范围表达式,例如[abc] and [a-c]), 以便Set-Location Foo[1] will not更改目录的工作字面上地 named Foo[1].

在这种情况下,您必须使用-LiteralPath范围 -
Set-Location -LiteralPath Foo[1]- 确保路径是解释的字面上地(逐字).


[1] This even applies if you append a space-less literal, e.g. cd $env:ProgramFiles\Git; however, if the literal part contains spaces, quoting is again needed; while, e.g., cd $env:ProgramFiles\'Common Files' works, the preferable approach is to enclose the entire argument in "...": cd "$env:ProgramFiles\Common Files"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cd 程序文件错误:找不到位置参数 的相关文章

  • Invoke-Sqlcmd 运行脚本两次

    我遇到了一个非常奇怪的问题并且可以重复 基本上 我使用invoke sqlcmd通过使用 inputfile来调用脚本文件 但是如果脚本文件存在一些执行错误 例如插入到列不应为空的表中 则脚本文件将被执行两次 我也可以从探查器中看到这两个执
  • 在 Android 中将列表传递给另一个 Activity

    我已经创建了一个列表 并希望将该列表传递给另一个活动 但当我创建意图时 我在 putExtra 语句上收到错误 只是想知道是否有任何简单的方法来传递字符串列表而不是单个字符串 Thanks private List
  • 如何使用PowerShell脚本远程启动/停止IIS 6.0/7.0?

    我有两台服务器服务器 A 和服务器 B 我想使用 Powershell 脚本从服务器 B 远程停止服务器 A 最简单的方法之一就是使用命令行执行PsExec http www microsoft com technet sysinterna
  • 创建 SYS_REFCURSOR 并将其作为输入参数从 Java 传递给 Oracle 过程

    我必须与具有 SYS REFCURSOR 作为输入参数的外部 Oracle 过程进行通信 过程 merge objects varchar2 中的 p table name p id array 中 varchar2 SYS REFCURS
  • Powershell 数组到带引号的逗号分隔字符串

    我有一个数组 需要输出到逗号分隔的字符串 但我还需要引号 这是我所拥有的 myArray file1 csv file2 csv a myArray join a 输出为 a最终 file1 csv file2 csv 我想要的输出是 fi
  • 使用变量作为启动进程的文件路径参数

    我想运行一个 exe 它可能位于多个位置 runpath servicepackfolder SQLServer2008SP1 KB968369 IA64 ENU exe Start Process FilePath runpath arg
  • PSExec 中的会话 ID

    Psexec 无法在远程会话上为我显示记事本 GUI 因此 我尝试获取会话 ID 如下所示 c Users Amitra Downloads PSTools gt PsExec u administrator p force 135 20
  • 如何获取管道对象的数量?我不想累积管道来缓冲

    假设我有一些 powershell 代码 function count pipe CmdletBinding param Parameter ValueFromPipeline true object inputObject process
  • Powershell:根据属性过滤属性

    我对 PowerShell 的自学经验有限 所以这可能是一些基本的东西 但我似乎无法正确理解 我在 Active Directory 中 需要提取电子邮件地址不以 SamAccountName 开头的用户列表 因此 如果您的登录名是 jdo
  • 如何在 PowerShell 中远程执行 ELEVATED 远程脚本

    我有两台服务器 serverA Windows 2003 服务器 serverB Windows 7的 ServerA包含一个带有批处理文件 deploy bat 的文件夹 需要从提升的 powershell 提示符执行该批处理文件 在Se
  • 如何使用Powershell变量打开Edge?

    我已经尝试过以下方法 edge New Object com microsoft edge application edge visible true edge FullScreen true 但我收到错误 New Object Retri
  • Powershell - 从图像网址下载图像

    对 powershell 的了解有限 我尝试从图像网址下载图像 例如这样 http hdwallpaperia com wp content uploads 2014 01 Mc Laren P1 Wallpaper Image Pictu
  • $Error 变量为 $Null 但 $_ 在 Catch 中包含错误

    我有 PS 模块 其中包含许多用于各个功能的脚本 还有一个 库 脚本 其中包含许多辅助函数 这些函数由模块中使用的函数调用 我们调用外部函数ReadWeb 并且它使用辅助函数ParseXML 本周我在内部助手中遇到了错误处理问题ParseX
  • 在Powershell中传递引用类型参数

    function test1 param System Collections ArrayList x x Add Test1Add write in Test1 x x New Object System Collections Arra
  • 修改 xml 同时保留空格

    我在尝试替换 XML 文件中的属性同时保留空格时遇到了几个问题 尝试1 xml xml get content data xml xml Path To Attribute value set content data xml String
  • 如何在 Azure PowerShell 函数中导入模块?

    我尝试从函数查询天蓝色表 使用 Get AzTableRow 在我的笔记本电脑上工作得很好 但模块 aztable 不存在于天蓝色功能中 因此我得到的只是红屏 有办法安装吗 谢谢 大卫 您无需自行在 Azure Function 中安装 A
  • EWS - 访问共享日历项目/约会

    我正在尝试获取共享日历的所有项目 我已关注EWS 访问所有共享日历 https stackoverflow com questions 23766747 ews access all shared calendars 23773834 23
  • 使用 PEM 证书验证 Powershell 中的 XML 签名

    我正在尝试创建一个 powershell 脚本来使用 XML 文档中的数据 然而 在进行任何工作之前 我需要通过验证签名来验证 XML 没有被篡改 我有一份用于以 PEM 格式签署 XML 的证书的公钥副本 但我不知道如何让 powersh
  • VSTS 任务组 Powershell 参数

    我使用具有四个参数的 Azure Powershell 任务内联脚本创建了 VSTS 任务组 我已将此任务组添加到发布定义并配置参数 当我尝试释放时失败并出现以下错误 2018 03 23T10 28 42 2811600Z 错误 在 C
  • Powershell从字符串中获取数字

    大家好 我正在尝试使用 powershell 从用户 ID 中获取号码 我们使用的格式是名字的第一个字母 姓氏的前四个字母和学生 ID 因此名为 John Smith ID 123456 的学生将是 jsmit123456 如果用户的名字少

随机推荐