Windows のコマンド ラインから、c:\foo にいて、c:\bar が PATH 上にある場合。
'\bin\myapp.exe' を呼び出して、パスを検索し、c:\bar\bin\myapp.exe を起動する方法はありますか?
おそらくプレフィックス/環境変数または標準ユーティリティでしょうか?
上記は Macos/Linux システム (?) では正常に動作すると思います。また、コマンドにフォルダー情報が含まれていない場合 (つまり、c:\bar\bin がパス上にあり、myappe.exe のみを呼び出す場合)、Windows でも正常に動作します。
アップデート-これは、(サードパーティの)インストールディレクトリを知らないスクリプト用であり、ベースディレクトリがパス上にあることだけを知っている。(exe名は十分にユニークなので、同じ名前のアプリと衝突する可能性は低いです)。おそらくスクリプトを書いて見つける(grep)ことができるでしょうが、コマンドでサブフォルダ名を許可する簡単なトリック(cmd.exeオプションなど)があることを期待していました。これは、UNIXが許可する方法に似ています。
答え1
読むコマンドライン引数(パラメータ)またはcall /?
:
… If Command Extensions are enabled CALL changes as follows: … In addition, expansion of batch script argument references (%0, %1, etc.) have been changed as follows: … %~$PATH:1 - searches the directories listed in the PATH environment variable and expands %1 to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string …
この
FOR
コマンドは、数字ではなく文字で識別されるパラメータ変数を作成します (例%%G
)。上記のパラメータ拡張は、これらにも適用できます。
上記をあなたのケースに適用します(またはスクリプト%%g
で使用する場合はパーセントが 2 倍になることに注意してください)。.bat
.cmd
for %%g in ("bin\myapp.exe") do @set "_pathToMyApp=%%~$PATH:g"
rem ↑↑ NO leading backslash
rem next line calls `myapp.exe` using its fully qualified name
"%_pathToMyApp%"
%g
実際の例: (開いているウィンドウでコマンドプロンプトから使用するための単一のパーセントサインに注意してくださいcmd
)。私のPATH
変数は、フォルダー…;C:\Utils\;…
への参照がこれ以上ないと読み取られます (C:\Utils
ベースディレクトリ) は、myapp.exe
指定されたすべてのパラメータを表示するシンプルなアプリケーションです。
d:\bat> myapp.exe
'myapp.exe' is not recognized as an internal or external command,
operable program or batch file.
d:\bat> bin\myapp.exe
The system cannot find the path specified.
d:\bat> set _
Environment variable _ not defined
d:\bat> for %g in ("bin\myapp.exe") do @set "_pathToMyApp=%~$PATH:g"
d:\bat> set _
_pathToMyApp=C:\Utils\bin\myapp.exe
d:\bat> "%_pathToMyApp%" display all parameters
param 0 = C:\Utils\bin\myapp.exe
param 1 = display
param 2 = all
param 3 = parameters
d:\bat>
答え2
Windows では、独自の環境変数を設定して使用することができます。次の場所に移動します。
- コントロールパネル
- システム
- 高度なシステム設定
- 詳細設定タブ
- 環境変数
次に、「新規」をクリックして変数を追加します。その後、その変数をコマンドで使用できます。パスを設定するだけで、任意の名前を付けて好きなように使用できます。
例:
したがって、あなたの場合は、次の変数を設定できます: appNameBinPath = "C:\bar" これを次の例で使用できます:
C:\foo>%appNameBinPath%\bin\myapp.exe
あるいは、スクリプトやコマンドラインで永続的な変数を設定する場合は、この記事を参照してください。https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe