如何从Powershell调用DOSkey别名?

时间:2018-07-31 02:11:45

标签: powershell cmd environment-variables registry doskey

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

如果您不必使用DOSKey,而只是想给命令添加别名,则可以像这样使用内置的Set-Alias命令:

Set-Alias -Name np -Value notepad++

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

notepad $profile

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

答案 2 :(得分:0)

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

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

注意事项:

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