2013-08-13 2 views
0

У меня есть пакет пакетных файлов, которые я хочу запустить последовательно. Один из них запускает MSI, который добавляет папку в PATH. Как я могу убедиться, что последующие командные файлы заметят это изменение без перезапуска CMD? Я использую Windows Server 2008 R2 x64.Windows - создание cmd см. Изменения PATH

Я пробовал call, cmd /c и start "", в надежде, что начало нового процесса будет работать, но это не так.

in run-both-scripts.bat 
call script1.bat <-- This runs an MSI which modifies the PATH 
call script2.bat <-- This relies on the PATH changes which were made by the MSI in script1.bat 

Для уточнения: это довольно легко воспроизвести.

  1. Начало CMD
  2. Создайте переменную окружения вручную, не используя setx, чтобы имитировать то, что делает MSI.
    1. правой кнопкой мыши на компьютер -> Свойства -> Дополнительные параметры системы -> Переменные среды -> New
    2. Создайте переменную среды с именем, скажем, hello со значением hi there.
  3. В окне CMD введите echo %hello%. Вы получите %hello%.
  4. Старайтесь cmd /c "echo %hello%. Вы получите %hello%.
  5. Попробуйте start "", чтобы открыть новый CMD-процесс; тип echo %hello%. Вы получите %hello%.
  6. Попробуйте start "" echo %hello%, чтобы запустить команду в новом CMD-процессе. Вы получите %hello%.
  7. Наконец, попробуйте вручную, открыв новое окно CMD в меню «Пуск» и введите echo %hello% оттуда. Вы увидите hi there.

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

+0

'без перезапуска CMD'? каждая партия перезапустит cmd .... – Endoro

+0

@Endoro Если вы запустите их, нажав на них в проводнике, да. Нет, если вы вводите свои имена в командной строке или автоматизируете их в другом пакетном файле. –

+0

просто сохраните переменную пути в текстовом файле и сравните ее при старте партии. – Endoro

ответ

0

Хорошо, некоторые исследования, и выяснили, почему soloutions, которые мы бросали на вас, не работают. Когда вы запускаете cmd.exe в качестве приложения, он просматривает текущие переменные среды и копирует их в память. Когда вы запускаете cmd в пакетном файле, он не будет смотреть на переменные среды, вместо этого он будет смотреть на переменные, установленные в текущем пакетном файле, и использовать их. Это проблема при хранении данных в памяти. Единственный способ, которым это возможно, - скопировать текущие переменные среды в текстовый файл как память на жесткий диск. Теперь вопрос в том, как это сделать.

После тяжелых исследований единственное, что я смог найти, связанное с темой было использование start /i, однако, когда я тестировал это, он не работал. (start /? для получения дополнительной информации).

Другими словами, другие setx, я не думаю, что это возможно с помощью партии.

Mona

+0

Я уже пробовал это, и он не сработал. См. Мое редактирование на вопрос. –

+0

@poorsod: Прочтите мой новый ответ. – Monacraft

+0

Это отстой :(Спасибо за помощь в любом случае. –

Смежные вопросы