帶有相對於 PATH 的資料夾的 Windows 命令

帶有相對於 PATH 的資料夾的 Windows 命令

從 Windows 命令列,如果我位於 c:\foo,並且 c:\bar 位於我的 PATH 中。
有沒有辦法呼叫 '\bin\myapp.exe' 並讓它搜尋我的路徑來呼叫 c:\bar\bin\myapp.exe?
也許是前綴/環境變數或標準實用程式?

我相信上面的命令在Macos/linux 系統上可以正常工作(?),如果命令中沒有資料夾信息,則在Windows 中也可以正常工作(即c:\bar\bin 在路徑上,我只調用myappe .exe)

更新-這是針對不知道(第三方)安裝目錄的腳本,它只知道基本目錄位於路徑上(並且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中使用雙倍百分比嘆號):.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

相關內容