Windows path не работает

Обновлено: 07.07.2024

У меня и моего коллеги одинаковые рабочие станции Dell с установленной Windows XP Professional x64 edition.

Моя переменная окружения Path начинается с:

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

Если я обращаюсь к системным свойствам -> переменным окружения и изменяю значение моей переменной JAVA_HOME, версия java, найденная из командной строки, изменяется, как я ожидаю. Это запускает совершенно новое окно консоли, чтобы быть уверенным, что вы подберете изменения.

Но на машине моего коллеги это не так. Он продолжает находить свою предыдущую версию Java, пока не вызовет переменную Path и не сохранит ее (даже если он не вносит в нее изменений). (Опять же, это при запуске совершенно нового окна консоли.)

Я наблюдаю это несоответствие в Windows в течение приблизительно 6 месяцев и очень любопытно об этом. У нас в офисе слишком много версий Windows, поэтому до сих пор у меня не было возможности увидеть, как это происходит на двух машинах с одинаковой версией ОС.

Чем это вызвано? Почему его машина не переоценивает Path, используя новый JAVA_HOME, когда мой делает?

(Это потому, что это не первая вещь на Пути? Если так, как это могло быть и почему? Я бы сделал больше тестов, чтобы проверить, но я думаю, что он сыт этим по горло и хотел бы вернуться к работе.)

Ваш путь - это объединение системного пути и пользовательского пути. Кроме того, системные переменные среды могут не содержать ссылок на пользовательские переменные среды, и любые такие ссылки не будут расширены. Чтобы получить желаемый результат, вставьте ссылку на% JAVA_HOME% в переменную среды пользователя PATH или создайте такую переменную, если она еще не существует.

Возможно, упрощенный пример прояснит это. Предположим, что среда SYSTEM

и среда пользователя JSmith является

тогда результирующий путь будет

Проверьте в реестре Windows под этим ключом:

ЕСЛИ переменная среды должна быть расширена (здесь:% JAVA_HOME%)

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

При использовании reg.exe через командную строку для добавления / редактирования значений реестра по умолчанию введите REG_SZ. Укажите тип REG_EXPAND_SZ с помощью параметра reg add /t REG_EXPAND_SZ .

Существует определенная проблема с расширением переменных среды внутри переменной PATH, когда переменная раскрывается в путь, содержащий пробелы.

Мы создали наши собственные переменные системного уровня, такие как «OUR_ROOT = c:\MyRoot», а затем использовали их в системном PATH, например «PATH =;% OUR_ROOT%\bin;» и это правильно раскрывается в "PATH =; c:\MyRoot\bin;". Пока проблем нет.

Но в Windows 7 (32-разрядная версия) я сам установил продукт и создал системные переменные среды, например:

и он добавил его в системную переменную PATH:

Но значения PATH, показанные в CMD, содержали «% STUDIO_BIN%;» а не расширенный путь. Значение в «Мой компьютер»> «Свойства»> «Дополнительно»> «Env.Vars» также не изменилось. Это означало, что я не мог запускать программы, которым требовалась DLL в этом каталоге.

Просто изменив STUDIO_BIN (через Мой компьютер> Свойства> Дополнительно . > Env Vars) на имя без встроенных пробелов:

и затем перезапуская окно CMD, PATH теперь:

(опуская "Название продукта 10.4") и вот, и следующее приглашение CMD показало PATH с правильно расширенным STUDIO_BIN!

Как ни странно, если я вернулся и добавил «Имя продукта 10.4» в STUDIO_BIN (включая все пробелы, которые были изначально там до того, как я начал работать с ним), и PATH все равно был правильно расширен.

Очевидно, что при достаточном изменении содержимого переменная PATH подвергается некоторой дополнительной обработке в диалоговом окне «Переменные среды», которая позволяет ему работать. Обработка не выполняется, когда переменная была добавлена установщиком продукта (который, вероятно, просто изменил PATH в реестре напрямую).

Я почти уверен, что это была проблема и с XP. Он только что появился у меня в Windows 7, когда я собирал новую машину для разработки. Видимо, это не было исправлено Microsoft.

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

Итак, подведем итог: вы можете:

изменить пути (и переместить все связанные файлы) на пути без пробелов, или

отредактируйте переменные, которые не могут быть расширены, в диалоговом окне «Переменные среды» (изменив их достаточно для правильной обработки - я не уверен, насколько этого достаточно).

Переменные среды в Windows 10

Получить информацию о существующих переменных можно в свойствах системы. Для этого кликаем по ярлыку Компьютера на рабочем столе правой кнопкой мыши и выбираем соответствующий пункт.

Переход к свойствам операционной системы с рабочего стола Windows 10

Переходим в «Дополнительные параметры».

Переход к дополнительным параметрам системы в ОС Windows 10

В открывшемся окне с вкладкой «Дополнительно» нажимаем кнопку, указанную на скриншоте ниже.

Переход к обзору переменных среды в ОС Windows 10

Здесь мы видим два блока. Первый содержит пользовательские переменные, а второй системные.

Раздел настройки переменных среды в Windows 10

Если требуется просмотреть весь перечень, запускаем «Командную строку» от имени администратора и выполняем команду (вводим и нажимаем ENTER).

Создание текстового документа со списком переменных среды из Командной строки Windows 10

На рабочем столе появится файл с названием «set.txt», в котором будут указаны все переменные окружения, имеющиеся в системе.

Текстовый документ со списком переменных среды Windows 10

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

Примечание: регистр при написании переменных не важен. Path=path=PATH

Переменные PATH и PATHEXT

Если с обычными переменными все понятно (одна ссылка – одно значение), то эти две стоят особняком. При детальном рассмотрении видно, что они ссылаются сразу на несколько объектов. Давайте разберемся, как это работает.

Переменные среды PATH и PATHEXT в Windows 10

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

    Поместить необходимый файл в одну из указанных директорий. Полный список можно получить, выделив переменную и нажав «Изменить».

Добавление значения переменной PATH в Windows 10

%SYSTEMROOT% определяет путь до папки «Windows» независимо от буквы диска.

Затем нажимаем ОК в окнах «Переменные среды» и «Свойства системы».

Для применения настроек, возможно, придется перезапустить «Проводник». Сделать это быстро можно так:

Открываем «Командную строку» и пишем команду

taskkill /F /IM explorer.exe

Завершение работы Проводника из Командной строки в Windows 10

Все папки и «Панель задач» исчезнут. Далее снова запускаем «Проводник».

Перезапуск Проводника из Командной строки в Windows 10

Теперь все файлы, помещенные в «C:\Script» можно будет открывать (запускать), введя только их название.

Запуск файла с помощью переменной среды PATH в Windows 10

Значения переменной среды PATHEXT в Windows 10

Запуск приложения с помощью переменной PATHEXT в Windows 10

Создание переменных среды

Создаются переменные просто:

    Нажимаем кнопку «Создать». Сделать это можно как в пользовательском разделе, так и в системном.

Для примера переделаем команду, которую мы использовали для получения списка (самая первая в статье). Теперь нам вместо

потребуется ввести только

Заключение

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

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

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

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

Список этих особых директорий хранится в системной переменной PATH.

Пример

Предположим, что возникла необходимость запускать какую-то программу, например Firefox , непосредственно из командной строки.

Без предварительной подготовки ввод Firefox в консоль выдаст ошибку.

Чтобы решить эту проблему нужно добавить директорию с испоняемым файлом firefox в PATH

Добавить директорию в PATH

Быстрый способ перейти к редактированию PATH - нажать клавишу Win и ввести в поиск env

Env с сайта www.andreyolegovich.ru

Правый клик на Этот Компьютер (This PC) → Свойства (Properties)

Мой компьютер Свойства изображение с сайта www.andreyolegovich.ru

Дополнительные параметры системы (Advanced system settings)

Control Panel - All Control Panel Items - System изображение с сайта www.andreyolegovich.ru

Дополнительно (Advanced) → Переменные среды (Environment Variables)

Environment Variables изображение с сайта www.andreyolegovich.ru

Если хотите менять для всей системы, то в окошке «Переменные среды» (System Variables) найдите строку PATH в блоке «Системные переменные» (System variables) выделите кликом и нажмите кнопку «Изменить. » (Edit. )

Если хотите менять только для своего пользователя, то делайте это в блоке «Переменные среды пользователя %USERNAME%» (User variables for %USERNAME%)

Environment Variables изображение с сайта www.andreyolegovich.ru

Создайте новый путь (New)

Path Environment Variable изображение с сайта www.andreyolegovich.ru

Введите адрес директории в которой лежит нужная программа. В нашем случае это

Path Environment Variable изображение с сайта www.andreyolegovich.ru

Перезапустите консоль или открываем новую и пишем там firefox.

Браузер должен запуститься.

Изучить содержимое PATH

В PowerShell достаточно выполнить

Name Value ---- ----- Path C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPo.

В cmd.exe посмотреть список переменных окружения можно выполнив команду set без параметров.

Выдача содержит системные переменные и переменные пользователя а также дополнительную информацию. Содержимое PATH выделено зелёным.

результат выдачи команды set без параметров

Ошибки

Скорее всего Вы пытаетесь добавить в unix PATH адрес из Windows, c пробелами, скобками и так далее.

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

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

Postgesql

Приведу пример для использования psql из bash под Windows - это может пригодиться если Вы хотите временно добавить путь к psql в PATH чтобы запустить Postrgres скрипт.

Если я запустил команду Rscript "C: /TEMP/test.R" в командной строке, она работает, и мой скрипт работает так, как ожидалось. Как только я попытаюсь запустить его в своем коде VBA, он не распознает Rscript как действительную команду.

Когда я рассматривал переменную PATH, используемую WScript.Shell, я видел, что она не включает системные переменные с Rscript-контуром внутри нее.

Могу ли я заставить объект WScript.Shell использовать системную среду? Или, по крайней мере, использовать его переменные?

enter image description here

enter image description here

Надеюсь, вы найдете какое-то использование в моей (длительной) игре на этом. :-)

Тестирование готовности командной строки

Любая команда (включая RScript ), которая может быть запущена как из командной строки Windows, также может запускаться либо с помощью функции VBA Shell либо с WScript.Shell метода Windows WScript.Shell .

Windows Key

Проблема в том, что ваша строка cmd не является командной строкой. Это можно подтвердить, нажав + R и вставив содержимое строковой переменной cmd :

Как я понимаю, двойная звездочка является Java нотации, как вы используете его, и в R является такой же, как в ^ каретки характер, что для вычисления экспоненты.

Ссылка на переменную среды

Чтобы вернуть PATH окружения Windows PATH в VBA, вы должны использовать функцию VBA Environ .

Чтобы вставить переменную среды значения inline в командной строке, вы должны окружить ее символами % процентов % , такими как %path%

Переменная среды Windows PATH

PATH не возвращает одну папку. Это список папок, которые Windows должна проверить, чтобы найти исполняемый файл, который пытается выполнить.

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

Системный каталог Windows (обычно C:\WINDOWS\system32 ) обычно является первым каталогом в пути, за которым следуют многие (но не все) каталоги для установленных пакетов программного обеспечения.

Пример значения по умолчанию для PATH (из новой установки Windows 7):

Как и в случае %path%, this includes % SystemRoot% ', который по умолчанию в Windows 7 является строкой:

Проверка переменных среды

Вы можете проверить значение метки среды PATH :

Windows Key

    Хит + R . Введите cmd и нажмите Enter . (Должно открыться окно командной строки.) Введите или вставьте echo %path% и нажмите Enter .

Отобразится содержимое PATH среды Window PATH .

Вы также можете проверить переменные среды из Windows:

Примечание. Хотя вы технически можете изменить PATH в этом окне, я бы не рекомендовал это делать, особенно с PATH поскольку он разделен на папки System и User, а Windows любит определенные папки в определенных областях, а некоторые изменения не принимаются эффект до перезагрузки, но другие делают, и бла-бла-бла, поверьте мне: это проще сделать из командной строки.

Поэтому, основываясь на всем этом, кажется, что команда, которую вы пытаетесь запустить:

. что явно не сработает.

Получить или установить текущую рабочую папку/каталог

Я могу только догадываться о том, чего вы пытаетесь достичь.

Я подозреваю, что вы не собираетесь возвращать всю PATH , но интересуетесь только текущей рабочей папкой.

Если это так, вам не нужно указывать папку вообще. Shell уже выполняет команду в текущей папке.

Один из способов проверить, какой каталог или папка является текущим, - это CurDir() VBA CurDir() , например:

Значение CurDir можно изменить с ChDir инструкции ChDir .

Аналогичные функции

Обратите внимание, что команда CurDur() часто путают с похожими функциями, такими как:

    Application.Path которая возвращает путь к приложению Excel, или, ActiveWorkbook.Path который возвращает местоположение, в котором сохраняется активная книга (или пустая строка, если она не сохранена).

Если ваш R-скрипт и rscript.exe находятся в текущей рабочей папке, запустите его только с одной строкой VBA:

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

Дополнительная информация:

    Переполнение стека: запуск сценариев R из VBA MSDN: функция Shell (VBA) MSDN: функция Environ (VBA) R-Bloggers: передача аргументов в R-скрипт из командной строки Переполнение стека: R.exe , Rcmd.exe , Rscript.exe и Rterm.exe : какая разница? Обмен стеками: Статистика: двойная звезда ** в R? Википедия: PATH (переменная) Переполнение стека: значения по умолчанию PATH в Windows 10 SuperUser: PATH по умолчанию для Windows 7 MSDN: CurDir() (VBA) MSDN: ChDir() (VBA) MSDN: Application.Path (Excel/VBA) MSDN: ActiveWorkbook.Path (Excel/VBA) Переполнение стека: дождитесь завершения команды Shell Форумы MSDN: Разница между wscript.shell и shell.application Переполнение стека: шаги для запуска сценария R через командную строку Windows
Еще одна демонстрация того, что неправильно с вашим кодом:

У меня есть пакетный файл с именем test.bat расположенный в C:\WINDOWS . Моя PATH среды PATH содержит C:\WINDOWS (между прочим).

Если я test.bat в командную строку в корневой папке C:\ и наберите test.bat :

img1

. он работает правильно (хотя мой файл не находится в этой папке. поскольку папка c:\windows находится в переменной PATH ).

Однако, если я C:\test.bat в командную строку и наберите C:\test.bat :

img2

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

--- В VBA, если я запустил команду Shell "test.bat",1 :

img3

. он работает правильно (хотя мой файл не находится в этой папке. поскольку папка c:\windows находится в переменной PATH ).

Однако, если в VBA я запускаю команду Shell "c:\test.bat",1 :

img4

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

Как VBA, так и команда Shell ведут себя одинаково, при предоставлении той же информации.

Читайте также: