gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:13:59 31 4
gpt4 key购买 nike

我使用的是 Windows PowerShell,它是使用 doskey 宏配置的。
我有一个名为 Macros.doskey 的文件.

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

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

例如,当我输入 105在 PowerShell 中它将执行命令 code E:\static5\105
现在我想知道如何从别名中获取命令。

最佳答案

  • doskey 是一个实用程序主要设计用于 cmd.exe ,而不是 PowerShell .
  • PowerShell 以别名和函数的形式内置了更好的功能,在 Windows 10 中,您甚至必须停用 PowerShell 自己的命令行编辑才能获得 doskey工作(见下文)。
  • 如果你还想用doskey在 PowerShell 中,有两个 先决条件 :
  • PSReadLine module - 自 Windows 10 起默认处理命令行编辑 - 不得加载,因为它优先于 doskey定义[1];也就是说,您可能需要 使用 Remove-Module PSReadLine 显式卸载它,但这意味着您将失去它的所有好处 .
  • 您必须调用任何 doskey.exe /exename=powershell.exe 的宏定义(Windows PowerShell) 或 /exename=pwsh.exe (PowerShell Core) 以便它们可以从 PowerShell 中使用。
  • 请注意,它是 doskey扩展用户键入的宏名称,这意味着 PowerShell 只能看到扩展的命令,因此不知道宏名称。因此,尝试检查 doskey带有 Get-Command 的宏行不通;检查 doskey /macros 的输出相反,如 Lee Dailey's answer .
  • 此外,doskey当通过 Read-Host 请求任意用户输入时也解析宏[1],这是不希望的。


  • 总结 不使用的原因doskey在 PowerShell :
  • 它不能与 PSReadLine 一起使用模块,默认情况下处理自 Windows 10 以来的命令行编辑并提供宝贵的功能。
  • doskey当脚本通过 Read-Host 请求任意用户输入时,总是会发生宏扩展。 ,这是不希望的。


  • 因此,我建议你 放弃doskey支持 PowerShell 函数,并将它们添加到您的 $PROFILE文件 以便它们在每个 session 中都可用:
  • 虽然您可以定义以数字命名的函数,例如 105在 PowerShell 中,您必须使用 & 调用它们以便与实际数字消除歧义,例如 & 105 .
  • 因此,我建议将您的方法重构为 定义一个名为 c 的函数 ,它需要一个可选参数来识别要打开的文件:

  • function c { pushd E:/static5; code $(if ($Args) { $Args } else { '.' }); popd }

    您的原创 doskey然后宏映射到这个函数,如下所示:
  • 105 -> c 105
  • 135 -> c 135
  • static5 -> c

  • 请注意,这不仅允许您将任意文件名(位于 E:/static5/ 中的文件)传递给函数 c ,但甚至是多个;例如, c 105 135将打开两个文件进行编辑。

    检查函数的定义 c稍后,您可以直接调用 $function:c或者,更详细地说, (Get-Command c).Definition .

    [1] 如 PetSerAl注释:“ doskey 在控制台输入缓冲区上执行翻译。[...]。如果控制台不是行输入模式,则它不起作用,因此它与 PSReadline 不兼容,尽管 Read-Host 将做作的。
    /image/HpYzq.png "

    关于powershell - 如何从 Windows PowerShell 中的 doskey 别名获取完整命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55090336/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com