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
FOR
comando 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 %%g
para usar em um script .bat
ou .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 %g
para usar no prompt de comando em uma cmd
janela aberta). Minha PATH
variável é lida como …;C:\Utils\;…
sem nenhuma referência adicional à C:\Utils
pasta (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