Задать вопрос
@to2n

Как работает команда SET в консоли windows?

1. Почему команда не выводит добавленный путь в консоль? Только изначальное состояние переменной PATH
cmd /C "set PATH=C:\Qt\5.9.1\mingw53_32\bin;%PATH% && echo %PATH%"

2. Почему при вот таком запуске, приложение ругается на то, что не нашло библиотеки, которые лежат по добавленному пути
cmd /C "set PATH=%PATH%;C:\Qt\5.9.1\mingw53_32\bin && reactNativeDesktop.exe"

А если переставить добавляемый путь в начало, то программа запускается корректно
cmd /C "set PATH=C:\Qt\5.9.1\mingw53_32\bin;%PATH% && reactNativeDesktop.exe"
  • Вопрос задан
  • 2100 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@res2001
Developer, ex-admin
1.Потому что так работает cmd.exe - это не вина команды set.
Дело в том, что cmd.exe командные файлы обрабатывает построчно.
Он берет очередную строку из файла целиком, перед тем как ее исполнить разъименовыввает переменные, т.е. вставляет непосредственно в команду содержимое переменной и только потом выполняет команду.
Поэтому появляется эффект, который вы описали.
В вашем случае командного файла нет, но cmd.exe воспринимает переданную ей строку как единую команду и работает с ней точно так же как и со строкой командного файла.
Вы можете обойти это просто спустив echo %PATH% на отдельную строку, но для этого придется создать батник.
Но в вашем случае такое изменение переменной PATH ничего вам не даст, т.к. действие команды set будет актуально только внутри текущего сеанса выполнения cmd.exe.

2.Хорошо бы посмотреть как конкретно ругается программа.
Мне кажется, что в первом случае она находит какие-то аналогичные библиотеки, которые лежат в другом месте (прописанном в PATH), но они ей не подходят - другая версия или они вообще левые, просто называются так же.
Во втором случае поиск начинается сразу с нужного каталога и находятся нужные библиотеки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы