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]) }

$pwdpath値として現在の作業を伴う自動変数です

編集:

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