Comando do Windows com pasta relativa ao PATH

Comando do Windows com pasta relativa ao PATH

Na linha de comando do Windows, se eu estiver em c:\foo e c:\bar estiver no meu PATH.
Existe alguma maneira de chamar '\bin\myapp.exe' e fazer com que ele pesquise meu caminho para invocar c:\bar\bin\myapp.exe?
talvez uma variável de prefixo/ambiente ou um utilitário padrão?

Acredito que o procedimento acima funcionaria bem em um sistema Macos/linux (?) E funcionaria bem no Windows se não houvesse informações de pasta no comando (ou seja, c:\bar\bin está no caminho e eu só chamo myappe.exe)

Atualizar-isto é para um script que não conhece o diretório de instalação (de terceiros), ele só sabe que o diretório base está no caminho(e o nome do exe é exclusivo o suficiente para que seja improvável que colida com um aplicativo com o mesmo nome). Eu provavelmente poderia escrever um script para encontrá-lo (grep), esperava que houvesse um truque fácil (opção cmd.exe, etc) para permitir o nome da subpasta no comando, semelhante a como o unix permitiria

Responder1

LerArgumentos de linha de comando (parâmetros)ou 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

O FORcomando cria variáveis ​​de parâmetro que são identificadas com uma letra em vez de um número (por exemplo, %%G). As expansões de parâmetros descritas acima também podem ser aplicadas a estes.

Aplicando acima ao seu caso (observe a porcentagem dobrada de suspiro %%gpara usar em um script .batou .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%"

Um exemplo real: (observe o suspiro de um único percentual %gpara usar no prompt de comando em uma cmdjanela aberta). Minha PATHvariável é lida como …;C:\Utils\;…sem nenhuma referência adicional à C:\Utilspasta (diretório base), myapp.exeé um aplicativo simples que exibe todos os parâmetros fornecidos:

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>

Responder2

No Windows você pode definir suas próprias variáveis ​​de ambiente e usá-las. Então você poderia ir para:

  • Painel de controle
  • Sistema
  • Configurações avançadas do sistema
  • Guia Avançado
  • variáveis ​​ambientais

Depois é só clicar em “novo” e adicionar sua variável. Você pode então usar essa variável em comandos. Então você pode simplesmente definir seu caminho e usá-lo como quiser com o nome que você der.

Exemplo:

Portanto, no seu caso, você pode definir a seguinte variável: appNameBinPath = "C:\bar" Você pode usá-la no exemplo a seguir:

C:\foo>%appNameBinPath%\bin\myapp.exe 

Alternativamente, se você deseja definir uma variável permanente por script e/ou linha de comando, você pode ver este artigo:https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe

informação relacionada