如何从 Powershell 调用 DOSkey 别名?

How do I call a DOSkey Alias from Powershell?

我有像这样设置的 DOSKey 别名 (Aliases in Windows command prompt) 从注册表调用它,我希望能够从 powershell 运行 它;有什么办法可以做到这一点?它真正做的就是向 %PATH% 环境变量添加一些东西。

如果您不必使用 DOSKey 并且只想为命令添加别名,则可以使用内置的 Set-Alias 命令,如下所示:

Set-Alias -Name np -Value notepad++

这将在当前 powershell window 打开时将 np 别名为 notepad++。它还允许您使用 np temp.txt 打开文件。 如果您想坚持这一点,可以将其添加到您的个人资料中。您可以通过编辑 Microsoft.PowerShell_profile.ps1 来做到这一点,shorthand 是:

notepad $profile

随意使用 notepad++ 或您的 PATH 中可能有的任何其他编辑器。您可以将 Set-Alias 行添加到文件底部并保存并关闭它。 当您随后打开另一个 powershell 实例时,它将有示例 np 别名可用。

下面的代码会将您的 DOSKEY 宏复制到 PowerShell 别名中。对于某些已经具有 PowerShell 别名或在 PowerShell 中以不同方式工作的命令,这可能有意义也可能没有意义。

请注意,您必须将命令源到当前 shell。

PS C:\src\t> type .\Get-DoskeyMacros.ps1
& doskey /MACROS |
    ForEach-Object {
        if ($_ -match '(.*)=(.*)') {
            Set-Alias -Name $Matches[1] -Value $Matches[2]
        }
    }
PS C:\src\t> . .\Get-DoskeyMacros.ps1

注释: (ht mklement0)

此代码假定已经定义了 doskey 别名,这在正常的 PowerShell 会话中是不可能的。但是,您可以从定义了它们的 cmd 会话或 运行 来自定义它们的 PowerShell 的批处理文件启动 PowerShell 会话。

一个潜在的别名转换问题是 doskey 宏支持参数(例如 $*),而 PowerShell 别名不支持。

@lit 的脚本对我不起作用。 下面是一个有效的脚本。它将生成的 Set-Alias 命令复制到 $profile 脚本。

doskey /MACROS |
 ForEach-Object {
     if ($_ -match '(.*)=(.*)') {
         echo ('Set-Alias -Name '+$Matches[1]+' -Value '+$Matches[2])
     }
  } > $profile

备注:

  • 与原始脚本一样,这必须在从 cmd 会话启动的 PowerShell 会话中执行。
  • $profile 文件对我来说不存在。我首先必须创建它以及包含的文件夹。