Como escrever um arquivo em lote para anexar cada item (de uma lista de diretórios lidos de um arquivo externo) ao PATH?

1

Como posso traduzir o arquivo em lote de

rem working batchA.bat
PATH=%PATH%;C:\Program Files\gs\gs9.07\bin
PATH=%PATH%;C:\Program Files (x86)\Adobe\Reader 11.0\Reader
PATH=%PATH%;C:\Program Files (x86)\Google\Chrome\Application
PATH=%PATH%;C:\Program Files (x86)\cwRsync\bin
PATH=%PATH%;C:\Program Files (x86)\PDF Labs\PDFtk Server\bin

setx PATH "%PATH%" /m

para

rem NOT working batchB.bat
for /f "delims=" %%x in (List.txt) do (PATH=%PATH%;%%x)
setx PATH "%PATH%" /m

onde List.txt contém o seguinte.

C:\Program Files\gs\gs9.07\bin
C:\Program Files (x86)\Adobe\Reader 11.0\Reader
C:\Program Files (x86)\Google\Chrome\Application
C:\Program Files (x86)\cwRsync\bin
C:\Program Files (x86)\PDF Labs\PDFtk Server\bin

?

    
por kiss my armpit 10.03.2013 / 18:05

3 respostas

0

Eu já tentei de todas as formas possíveis para implementar isso, mas continue correndo em bloqueios de estrada como você já viu.

Existem algumas opções que não são tão boas de usar, mas ainda farão o trabalho:

1. Configurando as variáveis em uma máquina, exportando-as e reutilizando-as em outra.

Adaptado de como definir a variável de ambiente do conteúdo do arquivo ?

Em uma máquina que já tem a configuração de caminhos, execute:

echo %PATH%> dat

Isso criará um arquivo chamado dat, que contém o caminho completo da máquina de referência.

Você pode, então, reaplicá-los em uma máquina diferente, passando-os para o comando:

set /P PATH=< dat

Deve ser possível editar dat de modo que contenha apenas os caminhos que você deseja anexar a uma máquina e modifique o comando da seguinte forma:

set /P PATH=%path%;< dat

Note que eu não testei esta modificação.

A partir de agora, você pode adicionar alterações a dat .

2. Usando um aplicativo de terceiros, pathed.exe

Usando informações de Edite a variável de ambiente PATH no Windows sem problemas

Usando Pathed , parte do gtools , você pode anexar o caminho.

Assumindo que sua lista é List.txt e você está no mesmo diretório que a lista, o comando ficaria assim:

for /f "delims=" %%x in (List.txt) do (pathed /append %%x /machine)

Você também precisará de um caminho no seu caminho ou no mesmo diretório em que está trabalhando.

2. Usando o PowerShell

Você também pode procurar no PowerShell, mas já indicou que isso não é uma opção (além disso, a opção 1 ou 2 deve ser capaz de enxergá-lo corretamente.)

    
por 11.03.2013 / 00:56
0

Tente isso:

setlocal enabledelayedexpansion
for /f "delims=" %%x in (List.txt) do (PATH=!PATH!;%%x)
setx PATH "!PATH!" /m
    
por 11.03.2013 / 02:02
0

O problema que você está tendo é que as variáveis são expandidas na linha FOR somente uma vez, então quando você executa um loop embora o% PATH% não seja mais uma variável.

for /f "delims=" %%x in (List.txt) do (PATH=%PATH%;%%x)

Torna-se isso ANTES que o loop seja executado:

for /f "delims=" %%x in (List.txt) do (PATH=C:\Windows;Blah;Blah;%%x)

Você pode resolver isso usando a expansão atrasada, como Karan disse, mas eu nunca tive muita sorte com isso. Eu sempre recomendo uma função ao usar loops.

for /f "tokens=*" %%x in (List.txt) do call:loadpath "%%x"
setx PATH "%PATH%" /m

Exit /b 0

REM -------------------------

:loadpath
SET PATH=%PATH%;%~1
Exit /b 0

Notas: use "tokens = *" para obter toda a linha do arquivo. Aspas duplas "%% x" ao chamar a função para colocar cada palavra em% 1. Use% ~ 1 dentro da função para retirar as aspas duplas do valor.

    
por 19.03.2013 / 01:51