3

我有我这样设置的 DOSKey 别名(Windows 命令提示符中的别名)从注册表调用它,我希望能够从 powershell 运行它;有没有办法做到这一点?它真正所做的只是在 %PATH% 环境变量中添加一些内容。

4

3 回答 3

4

下面是将您的 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 别名不支持。

于 2018-07-31T16:27:28.197 回答
2

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

Set-Alias -Name np -Value notepad++

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

notepad $profile

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

于 2018-07-31T06:53:30.320 回答
1

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

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

笔记:

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