如何设置仅适用于Powershell中特定文件夹的别名?

时间:2019-03-01 15:48:31

标签: powershell

我正在使用Powershell来管理计算机上某些.net项目的构建,我想为其创建别名。唯一的窍门是,我只想在包含所有代码的文件夹中使用别名。有没有办法仅在特定文件夹中应用别名?

1 个答案:

答案 0 :(得分:0)

由于它的晦涩之处,我不推荐使用它,但是您可以通过确定交互式提示字符串的prompt函数 动态添加和删除别名或函数,因为它被称为在每个命令之后。

请注意,PowerShell别名仅允许使用别名命令 names (或路径);也就是说,您不能在其中加入参数,这就是下面的示例改为使用 function 的原因(但是对于别名,它也可以类似地工作):

function prompt {
  # Define function `gs` on demand whenever the current location is a in a Git
  # repo folder, and remove it when switching to any other folder.
  if (Test-Path ./.git) { function global:gs { git status $Args } }
                   else { Remove-Item -EA Ignore function:global:gs }
  # Define the standard PS prompt string.
  "PS $PWD$('>' * ($nestedPromptLevel + 1)) "
}

为减少模糊性,您可以修改提示字符串以表明特定于文件夹的命令是否有效:

function prompt {
  # Define function `gs` on demand whenever the current location is a in a Git
  # repo folder, and remove it when switching to any other folder.
  if (Test-Path ./.git) {
    $indicator = '[repo]'
    function global:gs { git status $Args }
  } else {
    $indicator = ''
    Remove-Item -EA Ignore function:global:gs
  }

  # Define the standard PS prompt string.
  "PS $PWD $indicator$('>' * ($nestedPromptLevel + 1)) "
}

现在,只要当前位置是Git存储库文件夹,您的提示将包含子字符串[repo](例如PS /Users/jdoe/Projects/foo [repo]>)。