Windows CMD-сброс переменной пути из пакетного файла?

у меня есть пакетный файл, который изменяет PATH переменная, добавляя несколько адресов. Когда пользователь выходит из системы-затем-on, PATH сбрасывается до исходного значения (до запуска пакетного файла). Такое поведение нормально.

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

Я хотел бы сбросить переменную на то, что она когда пользователь входит в систему, перед добавлением значений. Я считаю, что решение состоит в том, чтобы записать исходное значение во временный файл и прочитать его обратно, но есть ли лучший способ сделать это?

3 ответов


вместо записи исходного значения во временный файл вы можете записать его в другую переменную среды:

if not defined ORIGINAL-PATH set ORIGINAL-PATH=%PATH%
set PATH=c:\extra\stuff;%ORIGINAL-PATH%

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

echo %PATH% | findstr /c:"c:\extra\stuff;" > nul || set PATH=c:\extra\stuff;%PATH%

поставить @SETLOCAL в верхней части пакетного файла.

любые изменения, внесенные в среду, будут восстановлены при выходе из пакетного файла.

Run setlocal /? для более подробной информации.


Я долгое время искал решение для аналогичной проблемы. Наконец, я закончил использование pathmgr.cmd, который я загрузил из:

http://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

чтобы использовать его для очистки пути пользователя, можно использовать следующие параметры из командной строки:

pathmgr.cmd /clean /user /p / y

многие другие полезные опции также доступны.