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
многие другие полезные опции также доступны.