PATH に相対的なフォルダーを使用する Windows コマンド

PATH に相対的なフォルダーを使用する Windows コマンド

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

関連情報