Adiciona um diretório e todos os subdiretórios à variável PATH com uma única entrada

12

Eu tenho um diretório na minha pasta pessoal em que eu coloco o software de linha de comando (CMD_Software). Eu coloquei cada parte do software em seu próprio diretório dentro do CMD_Software, a fim de evitar a desordem.

Eu gostaria de fazer uma única entrada na minha variável PATH que permitirá acesso ao CMD_Software e a todos os diretórios contidos na linha de comando.

Eu tentei C:\Users\myuser\CMD_Software\* , mas isso não fez nada. Esse é o ponto em que fiquei sem ideias.

Por favor, note que eu não estou tentando definir um novo caminho, enquanto no terminal, estou tentando definir um novo caminho nas "Variáveis de Ambiente" disponíveis na guia "Avançado" das Propriedades do Sistema.

    
por Landon Brainard 21.03.2013 / 16:42

4 respostas

10

A variável PATH não suporta curingas ou recursão. Isso é por design.

Existem duas soluções possíveis que usei ocasionalmente:

  • Crie um diretório com arquivos em lote simples e adicione esse diretório ao PATH. Cada arquivo em lote pode iniciar o programa desejado, por exemplo:

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    A primeira linha é um comentário, a segunda começa com @ para evitar mostrar o comando sendo executado e %* é usado para passar qualquer argumento de linha de comando para o EXE.

  • Adicione aliases ao arquivo CMD.EXE:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    Isso essencialmente traduz CMD_Software no prompt de comando para tudo depois do sinal de igual. O $* é substituído pelos argumentos fornecidos.

Eu prefiro a segunda abordagem, porque você pode agrupar todos os aliases em um único arquivo (ver a opção "/ MACROFILE" no DOSKEY /?) e executá-la automaticamente sempre que o interpretador de comandos começar a usar uma configuração do registro (consulte "AutoRun "chave no CMD /?) .

Uma desvantagem do segundo método é que os aliases funcionam apenas no início de uma linha de comando. Isso pode ser um problema se você quiser encadear comandos. Por exemplo, CLS & CMD_Software não funcionará, a menos que você coloque o alias em uma linha separada usando parênteses:

CLS & (
CMD_Software
)

Sempre que isso se torna um problema, acabo recorrendo à abordagem de arquivo de lote.

    
por 28.03.2013 / 15:21
4

Isso é o que eu uso para corrigir o problema. Copie esse script abaixo e salve-o como FIXPATH.BAT na pasta que você adicionou à variável de ambiente PATH . Por exemplo:

C:\Users\myuser\CMD_Software\

Agora, sempre que você precisar executar um programa que esteja em uma subpasta, diga ...

C:\Users\myuser\CMD_Software\unixutils\grep.exe
or
C:\Users\myuser\CMD_Software\imagetools\exiftool.exe

Execute fixpath primeiro e insira o comando (por exemplo, grep ou exiftool ) da seguinte forma:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\myuser>fixpath
C:\Users\myuser>exiftool

%código%
setlocal EnableDelayedExpansion
cd /D %~dp0

for /R %%d in (.) do (
    set "dirs=!dirs!;%%d"
)

path=%path%!dirs!
(endlocal
    set "ret=%PATH%"
)
cmd /K "title [#] Path Fixed [#] && path %ret%"
exit /B

Graças a resposta da @VonC

    
por 26.11.2014 / 11:38
1

Coloque um subdiretório "programlinks \" sob ... \ CMD_Software (ou em qualquer lugar, na verdade) e preencha com links simbólicos ou hardlinks para cada executável que você deseja acessar. Então um único entrada no PATH para ... \ programlinks será suficiente.

    
por 17.11.2014 / 05:09
0

Se você não está muito desanimado com a idéia, é possível copiar suas ferramentas de linha de comando para o diretório Windows \ System32. Então você pode executá-los a partir de qualquer diretório, como ping ou ipconfig.

editar
Depois de um pouco de ajustes, isso é possível. Você só precisa usar ponto-e-vírgula para delimitar seus diretórios. Digamos que você tenha um programa em "folder1" e "folder2". Você escreveria seu caminho assim:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

Então você pode chamar um programa em qualquer diretório direto da linha de comando. AFAIK não há outra maneira de fazer isso com apenas uma linha.

Informações de suporte:

    
por 21.03.2013 / 17:35