如何从 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
文件对我来说不存在。我首先必须创建它以及包含的文件夹。
我有像这样设置的 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
文件对我来说不存在。我首先必须创建它以及包含的文件夹。