我有我这样设置的 DOSKey 别名(Windows 命令提示符中的别名)从注册表调用它,我希望能够从 powershell 运行它;有没有办法做到这一点?它真正所做的只是在 %PATH% 环境变量中添加一些内容。
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 别名不支持。
如果您不必使用 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
可用的示例别名。
@lit 的脚本对我不起作用。下面是一个有效的脚本。Set-Alias
它将生成的命令复制到$profile
脚本中。
doskey /MACROS |
ForEach-Object {
if ($_ -match '(.*)=(.*)') {
echo ('Set-Alias -Name '+$Matches[1]+' -Value '+$Matches[2])
}
} > $profile
笔记:
- 与原始脚本一样,这必须在从 cmd 会话启动的 PowerShell 会话中执行。
- 该
$profile
文件对我来说不存在。我首先必须创建它,以及包含的文件夹。