3

在 Windows 中启动 notepad++ 或许多其他 GUI 应用程序,它们将在命令行上接受文档的完全限定文件名,但如果它们不是完全限定的,则不接受它们,通常在 DOS/Windows 批处理文件中完成,如下所示:

 @echo off
 start "notepad++" "C:\Program Files (x86)\Notepad++\notepad++.exe" %*

上面,如果保存为“npp.cmd”将让你输入“npp foo.txt”,它会工作。请注意,如果没有 npp.cmd,即使输入 exe 的完整路径,但不完全限定要编辑的文件也不起作用,如下所示:

 "C:\Program Files (x86)\Notepad++\notepad++.exe" foo.txt

然而,这确实有效:

 "C:\Program Files (x86)\Notepad++\notepad++.exe" c:\users\warren\foo.txt

轻松解决此限制的一种方法是制作一个批处理文件 (.cmd),如该文件顶部所示。我正在学习 PowerShell,并试图在顶部的批处理文件中找到与“start .... %*”咒语等效的魔法。我相信它必须是一个“powershell函数”。

这是我到目前为止所拥有的:

new-item -path alias:nppapp -value "C:\Program Files (x86)\Notepad++\notepad++.exe"
function npp { nppapp $args }

上面是等价的,最后只是一个别名,因为$args真的不等价%*,因为它不做参数扩展。我想我需要这样的东西:

new-item -path alias:nppapp -value "C:\Program Files (x86)\Notepad++\notepad++.exe"
function npp { nppapp globexpand($args) }

globexpand当然,它是一个占位符,用于某种扩展/通配例程,我还没有在 PowerShell 中找到它。

4

1 回答 1

1

试试这个:

new-item -path alias:nppapp -value "C:\Program Files (x86)\Notepad++\notepad++.exe"

function npp { nppapp (join-path -Path $pwd -ChildPath $args[0]) }

$pwd是一个自动变量,当前工作path作为值

编辑:

function npp { 
if ($args[0] -match '.:\\.+')
{
nppapp $args[0]
}
else
{
nppapp (join-path -Path $pwd -ChildPath $args[0]) }
}
于 2012-11-11T20:40:44.850 回答