Comando do Windows com pasta relativa ao PATH

3

A partir da linha de comando do windows, se eu estiver em c: \ foo, e c: \ bar estiver em meu PATH.
Existe alguma maneira de chamar '\ bin \ myapp.exe 'e tê-lo procurar o meu caminho para invocar c: \ bar \ bin \ myapp.exe?
talvez uma variável de prefixo / ambiente ou um utilitário padrão?

Eu acredito que o acima funcionaria bem em um sistema Macos / Linux (?) e funciona bem no Windows se não houver informações de pasta no comando (ex: 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 exe é único o suficiente para não colidir com um aplicativo com o mesmo nome). Eu provavelmente poderia escrever um script para encontrar (grep), estava esperando 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

    
por bitcoder 21.09.2016 / 22:13

2 respostas

1

Leia argumentos da 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
…

The FOR command creates parameter variables which are identified with a letter rather than a number (e.g. %%G). The Parameter Expansions described above can also be applied to these.

Aplicando acima ao seu caso (observe o percentual do dobro de suspiro em %%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 um único percentual de suspiro em %g para usar no prompt de comando em uma janela cmd aberta). Minha variável PATH lê como …;C:\Utils\;… sem referência adicional à pasta C:\Utils ( diretório base ), myapp.exe é uma aplicação 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>
    
por 22.09.2016 / 09:39
2

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 de ambiente

Depois, basta clicar em "novo" e adicionar sua variável. Você pode então usar essa variável em comandos. Então você poderia simplesmente definir o seu caminho e usá-lo como quiser com qualquer nome que você der.

Exemplo:

Então, no seu caso, você pode definir a seguinte variável: appNameBinPath="C: \ bar" Você poderia então usá-lo no seguinte exemplo:

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

Como alternativa, se você quiser definir uma variável permanente por script e / ou linha de comando, poderá ver este artigo: link

    
por 21.09.2016 / 22:27