Команда Windows с папкой относительно PATH

Команда Windows с папкой относительно PATH

Из командной строки 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

Связанный контент