2

Как я могу перевести командный файл из

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

в

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

где List.txt содержит следующее.

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

?

3 ответа3

1

Проблема, с которой вы столкнулись, состоит в том, что переменные раскрываются в строке FOR только один раз, поэтому, когда вы выполняете цикл, хотя% PATH% больше не является переменной.

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

Становится так до того, как цикл запускается:

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

Вы можете решить эту проблему с помощью отложенного расширения, как сказал Каран, но мне никогда не везло с этим. Я всегда рекомендую функцию при использовании для циклов.

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

Примечания: используйте «tokens = *», чтобы получить всю строку из файла. Двойная кавычка "%% x" при вызове функции помещает каждое слово в% 1. Используйте% ~ 1 внутри функции, чтобы убрать двойные кавычки из значения.

0

Я старался всеми возможными способами реализовать это так, как вы хотите, чтобы это продолжалось, но продолжайте сталкиваться с препятствиями, как вы уже видели.

Есть пара опций, которые не так хороши в использовании, но все же сделают свою работу:

1. Настройка переменных на одном компьютере, их экспорт и повторное использование на другом.

Адаптировано, как установить переменную среды из содержимого файла?

На машине с уже настроенными путями запустите:

echo %PATH%> dat

Это создаст файл с именем dat, который содержит полный путь от эталонного компьютера.

Затем вы можете повторно применить их на другом компьютере, передав их в команду:

set /P PATH=< dat

Должна быть возможность отредактировать данные так dat чтобы они содержали только те пути, которые вы хотите добавить к машине, и изменили команду следующим образом:

set /P PATH=%path%;< dat

Обратите внимание, что я не проверял эту модификацию.

В дальнейшем вы можете добавлять любые изменения в dat .

2. Использование стороннего приложения, pathed.exe

Использование информации из Изменить переменную среды PATH в Windows безболезненно

Используя Pathed, часть gtools, вы можете добавить путь.

Предполагая, что ваш список List.txt и вы находитесь в том же каталоге, что и список, команда будет выглядеть так:

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

Вам также понадобится внести изменения в ваш путь или в тот же каталог, в котором вы работаете.

2. Использование PowerShell

Вы также можете заглянуть в PowerShell, но вы уже указали, что это не вариант (плюс вариант 1 или 2 должен видеть вас правильно).

0

Попробуйте это вместо этого:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .