Как избежать переполнения переменной среды PATH в Windows? - PullRequest
111 голосов
/ 10 декабря 2010

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

Так что вы рекомендуете? Давным-давно я пытался использовать программные ссылки исполняемых файлов в Dir, которые принадлежали пути, но этот подход не работал. Выдает «только исполняемый файл» известному Dir, имеет проблемы с тем, что практически любому приложению требуется набор файлов, так что это тоже плохо. Бросьте исполняемый файл и все его файлы в известный Dir, ммм это будет работать, но вероятность получить конфликт в имени файлов очень и очень высока. Создать HardLink? я не знаю. Что ты думаешь?

Ответы [ 12 ]

0 голосов
/ 11 декабря 2015

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

Существуют также некоторые ситуации, когда запуск этого скрипта нарушает работу (скажем, вgithub или cygwin shell), поэтому я также добавил файл, содержащий список путей, которые, если в них запускается командная строка, не изменяют переменную пути с помощью сценария запуска, который обычно обновляет путь.

@echo off

:: Modify these to the actual paths of these two files
set dontSetupFile=C:\Users\Yams\Dontsetup.txt
set pathFile=C:\Users\Yams\Path.txt

:: Retrieve the current path (for determining whether or not we should append to our path)
set curDir=%cd%

:: Be done if the current path is listed in the dontSetupFile
SetLocal EnableDelayedExpansion
for /F "delims=" %%i in (%dontSetupFile%) do (
    if "%%i"=="%curDir%" GOTO AllDone
)



:: Append the pathFile to our current PATH
set pathAppend=
for /F "delims=" %%i in (%pathFile%) do (set pathAppend=!pathAppend!%%i)

set PATH=%PATH%;%pathAppend%


:: The only way to actually modify a command prompt's path via a batch file is by starting
::   up another command prompt window. So we will do this, however, if this script is
::   automatically called on startup of any command prompt window, it will infinately 
::   recurse and bad things will happen.

:: If we already ran, we are done
if "%yams%"=="onion" GOTO AllDone

:: Otherwise, flag that we just ran, and then start up a new command prompt window
::   with this flag set
set yams=onion

cmd \K set PATH=%PATH%;

:: When that command prompt exits, it will load back up this command prompt window, and
::   then the user will need to exit out of this as well. This causes this window to
::   automatically exit once the cmd it just spawned is closed.
exit()

:: Path is set up, we are done!
:AllDone
@echo on

И Path.txt будет выглядеть примерно так:

C:\Program Files (x86)\Google\google_appengine;
C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn;
C:\Program Files\Microsoft DNX\Dnvm;
C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit;

В то время как Dontsetup.txt будет выглядеть примерно так:

C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit
C:\Program Files (x86)\Git\cmd
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

Чтобы автоматически запускаться при запуске, откройте regedit,перейдите к HKEY_LOCAL_MACHINE / ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / Microsoft / Командный процессор, затем щелкните правой кнопкой мыши справа и нажмите new -> Multi-String Value.Назовите это AutoRun.Установите его значение на

C:\Users\Yams\setUpPath.bat

или где бы вы ни хранили пакетный файл выше.

0 голосов
/ 18 мая 2015

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

  1. Созданы разные пользователи для различной комбинации использования пакетов программного обеспечения.Пример: (a) Создан пользовательский веб-сайт для обеспечения доступности всего программного обеспечения для веб-разработки;(b) Создана база данных пользователей для предоставления доступа ко всем программным пакетам базы данных и хранилищ данных.Помните, что некоторые программы могут создавать более одной записи.Или иногда я разбиваю это на пользователей с определенным оракулом и MSSQL и с конкретным оракулом.Я помещаю MySQL / PostgreSQL, tomcat, wamp, xamp все в учетную запись пользователя webr.

  2. Если возможно, установите общие пакеты, такие как office, photoshop, .., так как система зависит от всех пользователейспециальные пакеты в зависимости от пользователя.Конечно, мне пришлось войти в систему разных пользователей и установить их.Не все программное обеспечение может предоставить эту опцию.Если опция «Установить только для этого пользователя» недоступна, установите ее для всей системы.

  3. Я не устанавливаю программы в папку «Программный файл» (x86) или в «Программный файл»,Я всегда устанавливаю в базовый каталог.Например, 64-разрядная версия MySQL помещается в папку «C: \ mysql64», а 32-разрядная версия MySQL - в папку «C: \ mysql».Я всегда предполагаю добавление суффикса 64 только для 64-битного программного обеспечения.Если суффикса нет, то это 32 бит.Я следую за тем же самым на Яве и других.Таким образом, мой путь будет короче, не считая «C: \ Program File (x86)».Для некоторых программ может потребоваться отредактировать файл конфигурации, чтобы показать, где именно находится файл .exe.В эту папку будет установлена ​​только программа, которая требует установки в «C: \ Program File (x86)».Всегда помню, чтобы сократить имена.Я избегаю таких версий, как tomcat / release / version-2.5.0.3, таких подробностей.Если мне нужна известная версия, я создаю файл по имени версии и помещаю его в папку tomcat.В общем, сократите ссылку как можно больше.

  4. Включите любой пакет для замены сокращенной ссылки на путь, если все вышеперечисленные шаги превысили ограничение Windows.

Затем войдите в систему для конкретного пользователя (мобильное приложение, база данных / хранилище данных или веб-разработка .. ..) и выполните соответствующие задачи.

Вы также можете создавать виртуальные окна внутри окон.Пока у вас есть одна лицензионная копия ОС, возможно создание нескольких виртуальных окон с одним и тем же ключом.Вы можете поместить пакеты, специфичные для конкретной задачи, на этом компьютере.Вы должны запускать отдельную ВМ каждый раз.Некоторые пакеты, требующие большого объема памяти, такие как создатели 3D-анимационных фильмов, должны быть помещены на основной компьютер, а не в виртуальную машину, поскольку для виртуальной машины будет доступна только часть оперативной памяти.Хотя загружать каждую виртуальную машину - боль.

...