我如何在powershell中创建别名来启动notepad++

问题描述 投票:0回答:2

如何在 powershell 中创建别名来启动 notepad++ 有开始记事本++ 并且有别名我想将其组合

set-alias -name notepad -value start notepad++
但我收到这个错误

Set-Alias:找不到接受参数“notepad++”的位置参数。 在行:1 字符:1

  • 设置别名-名称记事本-值启动记事本++
  •   + CategoryInfo          : InvalidArgument: (:) [Set-Alias], ParameterBindingException
      + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetAliasCommand
    
powershell notepad++ alias notepad
2个回答
0
投票

Set-Alias
不接受这样的命令。您可以执行以下 2 件事中的 1 件事:

  • 创建启动Notepad++的函数;为该函数设置别名。这是我首选的方式,这样我就可以返回编辑函数,而无需编辑别名:
  • function Start-NotepadPlusPlus { Start-Process 'notepad++.exe' } Set-Alias -Name notepad -Value Start-NotepadPlusPlus
提供路径:
  • Set-Alias -Name notepad -Value 'C:\Program Files (x86)\Notepad++\notepad++.exe'



0
投票
tl;博士

省略
    start
  • 参数并提供
    notepad++.exe
    完整路径 作为
    -Value
    参数,例如(如果此完整路径不适合您,请参阅下文了解如何找到正确的路径):
    
    
  • # Shorter alternative: # Set-Alias notepad $env:ProgramFiles\Notepad++\notepad++.exe Set-Alias -Name notepad -Value $env:ProgramFiles\Notepad++\notepad++.exe
或者,如果您想依靠 
    start
  • (
    Start-Process
    ) 的便利性来为您发现
    notepad++.exe
    的位置,则必须使用
    函数
    $args 传递任何参数):
    
    
  • # PowerShell 7+ function notepad { start notepad++ $args } # Windows PowerShell, to work around a bug. function notepad { $argsParam = if ($args) { @{ ArgumentList = $args } } else { @{} } start notepad++ @argsParam }
以有用的评论为基础:

  • 在 PowerShell 中,别名只是命令的

    另一个名称(可以是 PowerShell cmdlet、函数、脚本或外部可执行文件,甚至是另一个别名)。

    因此,
    • Set-Alias

      -Value
      参数仅接受一个单个
      参数
      来描述名称映射的目标。 因此,

    • set-alias -name notepad -value start notepad++
    • 损坏的语法

      ,因为
      notepad++Set-Alias
      无法识别的
      额外参数。
      
      

  • 由于 Notepad++ 是一个
  • GUI

    程序,因此无需使用 start (

    Start-Process
    ) 来启动它
     
    异步
    ,即不阻塞调用会话,因为
    direct 调用会这样做默认情况下(请参阅下文了解同步解决方案)。

    但是不幸的是,Notepad++ 安装程序
    • $env:PATH 中包含其安装目录的条目,因此需要使用上面 notepad.exe

      完整路径

      但是,它确实创建了一个
    • 注册表条目
    • ,它允许

      Start-Process(与直接调用相反)发现notepad++.exe

      ;如果为了简单起见,您想依赖于此,则需要使用 
      function
       而不是别名,如下所述(只需从同步变体中删除 
      -Wait
      )。

      发现
    • nodepad++.exe
    • 完整路径

      的最简单方法是与Start-Process -PassThru

      交互启动Notepad++并访问返回的流程信息对象的
      .Path属性:
      # -> 'C:\Program Files\Notepad++\notepad++.exe', typically
      (Start-Process -PassThru notepad++).Path
      
      
      

    如果您
  • 需要的不仅仅是另一个命令的

    名称或路径 - 通常当您的“别名”应包含硬编码参数以传递给目标命令时 - 您必须定义一个 function 代替:

    
    这是您的“别名”的

    变体
      -
    • 现在必须实现为

      function - 使用

      Start-Process -Wait
      来启动Notepad++同步,即以阻塞方式
      ,同时还支持传递-通过参数(真正的别名定义
      隐式所做的)。
      function notepad { if ($args) { # Pass-through arguments specified. Start-Process -Wait notepad++ $args } else { Start-Process -Wait notepad++ } }

      notepad++
      • positionally

        绑定到

        -FilePath
        参数,并将 $args 绑定到
        -ArgumentList
        参数。
        
        
        请注意检查 
        $args

        是否包含元素 (
          if ($args)
        • ),不幸的是,这在
          Windows PowerShell
          中是必需的,其中
          bug
          阻止将 数组传递给 -ArgumentList;此问题已在 PowerShell (Core) 7+
           中得到修复
          
          
          
        • 如果您的类似别名的函数也需要支持
        管道输入
      • ,请参阅
      • 这个答案

        有关使用所谓的

        代理函数
      • 包装其他命令的更复杂但更复杂的方法,请参阅
      • 这个答案

© www.soinside.com 2019 - 2024. All rights reserved.