【问题标题】:Why does this Powershell function to change directory not work?为什么这个 Powershell 更改目录的功能不起作用?
【发布时间】:2015-12-03 23:45:10
【问题描述】:

我使用带有 posh-git 的 Powershell 窗口来处理 git,并且已经厌倦了反复输入 cd ..\Databasecd ..\Backendcd ..\Frontend 来在我正在使用的存储库之间切换。我想创建别名,以便我可以简单地运行 dbbefe 来执行此操作。

经过一些研究和失败的实验,我一无所获,发现 this answer 通知别名不能带参数,我应该使用函数,所以我尝试了。

我可以通过命令成功切换到一个想要的目录

Set-Location C:\Projects\Database

所以我在 Powershell 窗口中执行以下命令来创建函数

function db { set-location C:\Projects\Database }

并且这个执行没有错误。但是在之后立即运行 db 时,我收到以下错误。

db : The term 'Set-Location C:\Projects\Database' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1
+ db
+ ~~
    + CategoryInfo          : ObjectNotFound: (Set-Location C:\Projects\Database:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

我想最终向我的配置文件脚本中添加创建函数的命令,但一直无法通过这个简单的块,并且我感到非常沮丧,因为我无法让看似简单的事情起作用。

谁能帮我解决这个问题?

【问题讨论】:

  • 您的脚本非常适合我。您使用的是哪个版本的 PowerShell?
  • Remove-Item alias::db
  • 谢谢你们俩。我一看到@PetSerAl 的评论,我就有了一个 DOH!片刻。当然,发生的事情是 db 别名仍然存在,而且我现在了解到别名优先于函数。一旦我删除了我尝试过的所有别名和函数,然后重新创建了 db 一个,它就可以正常工作了。问题解决了。
  • @PetSerAl 你应该这样回答。我敢肯定,有很多人遇到过这个问题,甚至连别名优先考虑都没有。
  • 我会,但我认为在回答我自己的问题之前会有延迟。

标签: function powershell alias


【解决方案1】:

您抱怨Set-Location C:\Projects\Database 命令未找到,但命令被标记为错误的错误消息是db。我能找到这个错误消息的唯一合理解释是db 命令是Set-Location C:\Projects\Database 的别名。您可能会在尝试创建功能之前尝试创建别名。别名的优先级高于函数。所以,即使你现在有db 函数,db 仍然被解析为别名并产生错误。您必须删除别名Remove-Item Alias::db,然后db 将被解析为起作用。

【讨论】:

  • 是的,这正是发生的事情。我最初尝试创建一个别名,但在我继续尝试一个函数时将其抛在脑后。
猜你喜欢
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多