如何从Windows PowerShell中的doskey别名获取完整命令

时间:2019-03-10 17:19:59

标签: powershell windows-10 doskey

我正在使用Windows PowerShell,并且使用doskey宏对其进行了配置。 我有一个名为Macros.doskey的文件。

105=code E:\static5\105
135=code E:\static5\135
static5=code E:\static5

如何获取与别名对应的命令?

例如,当我在PowerShell中键入105时,它将执行命令code E:\static5\105

现在,我想知道如何从别名中获取命令。

2 个答案:

答案 0 :(得分:1)

我从来没有将doskey与PowerShell一起使用,所以我不确定它们的外观。我最好的猜测是,PowerShell将它们视为“应用程序”类型的命令,这通常意味着外部可执行文件。

要开始,请检查PowerShell看到的内容:

Get-Command 105 | Format-List *
# or
gcm 105 | fl *

从那里,您可能只会看到诸如doskey.exe之类的exe文件,或者可能还会看到其他信息。

如果它只是作为可执行文件列出,那么我不确定您是否可以从doskey中获取信息。

PowerShell具有自己的别名版本,可以让您进行全面发现,但是PowerShell别名不能采用参数,它们只是将一个命令别名为另一个命令。

您可以通过在PowerShell中编写函数来模拟doskey功能:

function static5 {
    code.exe 'E:\static5'
}

答案 1 :(得分:1)

这将很好地完成这项工作。 [ grin ]注意,它只是给出与宏匹配的文本。我没有用多行宏进行测试,也不知道那是否有可能。

如果您希望结果只是宏而不是整行,则可以添加| ForEach-Object {$_.Split('=')[1]}以得到=之后的部分。

@"
404=echo '404'
666=echo '666'
dwd=echo 'Doo Wa Diddy'
"@ | Set-Content "$env:TEMP\Doskey-Macros.txt" -Force

doskey /macrofile=c:\temp\doskey-macros.txt

function DKA ($Macro)
    {
    doskey /macros |
        Where-Object {
            $_ -match $Macro
            }
    }

测试和输出...

dka -Macro dwd
dwd=echo 'Doo Wa Diddy'

dka -Macro adg
# nothing at all since there was no match

dka 404
404=echo '404'