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