CMD: Anexa ao caminho sem duplicá-lo?

7

Para uma sessão de CMD , posso definir facilmente um novo caminho: SET PATH=%PATH%;"insert custom path here"

Isso em um arquivo em lotes não considera se o caminho personalizado já está incluído. Como evito duplicá-lo (por exemplo, verifique se ele já está contido na "string" PATH).

Observações:

  1. Relacionado: Como eu adiciono variáveis de ambiente definidas pelo usuário à variável de sistema PATH no Windows 7?
  2. Relacionado: Como posso anexar permanentemente uma entrada na variável PATH do sistema, via linha de comando?
  3. A mesma pergunta para o UNIX: Adicionar diretório ao $ PATH se ainda não está lá
  4. Algumas instruções de "CMD" String explicadas: link
por Horst Walter 27.09.2012 / 12:23

3 respostas

8

Semelhante à resposta do MaddHackers, apenas mais compacta.
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np% é o seu novo caminho, é claro que você pode usar literais. O que ele faz: echo %path%|find /i "%np%">nul pesquisa o caminho existente para uma string, descartando a saída. || significa executar com falha, então isso significa: Caminho de pesquisa para a string a ser adicionada e, se não encontrada, adicione-a.

Editar: geralmente não é necessário citar os caminhos, mesmo aqueles que contêm espaços, mas se você quiser citá-los , esta versão funcionará com caminhos duplos entre aspas:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

Editar: alterado findstr /i /c: para find /i como findstr pode interpretar incorretamente algumas seqüências como observado por KubaOber nos comentários

    
por 27.09.2012 / 17:29
3

Eu sei que está sujo, mas isso deve funcionar:

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')

onde %checkstr% é a string a ser verificada no PATH e %newpath% é o novo PATH a ser anexado ao PATH atual

Espero que isso ajude, e tenho certeza de que há um jeito mais fácil, mas isso deve funcionar por enquanto.

EDITAR

Portanto, se você não quiser adicionar as ferramentas do UNIX ao Windows, pode tentar essa sintaxe em lote:

echo %PATH% | find /C /I "<string to find>" > out.txt 
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt

Ugh, não é mais bonito, e pode ser feito como uma linha, se você conseguir que o comando find do pipe funcione como um subcomando na instrução if ...

    
por 27.09.2012 / 13:18
1

Script baseado em torno da resposta por "wmz":

@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE
    
por 28.09.2012 / 01:50