我有DOSKey别名,我可以这样设置(Aliases in Windows command prompt)从注册表中调用它,并且我希望能够从Powershell中运行它;有什么办法可以做到这一点?它真正要做的就是在%PATH%环境变量中添加一些内容。
答案 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
注意事项:
$profile
文件对我来说不存在。我首先必须创建它以及包含文件夹。