如何在 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
Set-Alias
不接受这样的命令。您可以执行以下 2 件事中的 1 件事:
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'
省略
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 cmdlet、函数、脚本或外部可执行文件,甚至是另一个别名)。
因此, 程序,因此无需使用 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++
绑定到
-FilePath
参数,并将 $args
绑定到 -ArgumentList
参数。
请注意检查
$args
是否包含元素 (if ($args)
Windows PowerShell中是必需的,其中
bug阻止将 空 数组传递给
-ArgumentList
;此问题已在 PowerShell (Core) 7+ 中得到修复