-1

Я пытаюсь выполнить файл .bat с набором команд, которые могут быть выполнены индивидуально через командную строку, но не все вместе через скрипт:

%comspec% /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
cd C:\pathname
msbuild filename.vcproj
cd Debug
filename.exe

В основном я пытаюсь вызвать командную строку Visual Studio, затем построить проект через нее, и после этого запустить сгенерированный .exe .

Сценарий останавливается на первой строке, когда переменная среды командной строки установлена для направления в Visual Studio; что-то вроде этого:

C:\Users\myusername\Desktop> C:\Windows\system32\cmd.exe /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
C:\Users\myusername\Desktop>

Остальные команды не вызываются, и сценарий заканчивается на этом этапе.

Параметр /k указывает запустить команду и вернуться в командную строку, это проблема? Любое предложение, как решить эту проблему?

2 ответа2

0

Если вы хотите, чтобы управление из вызываемого пакетного файла вернулось к вызывающему пакету, используйте команду call. call /? ,

0
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86
cd C:\pathname
msbuild filename.vcproj
cd Debug
filename.exe

Объяснение:

VCVarsall.bat - это инструмент командной строки Visual Studio в Visual Studio. Это инструмент, который позволяет вам устанавливать различные параметры для интегрированной среды разработки (IDE), а также создавать, отлаживать и развертывать проекты из командной строки.

VCVarsall.bat , вы увидите способ « установить различные параметры »: он вызывает дополнительные сценарии для проверки наличия (и допустимости при необходимости) некоторых папок (например, HTML Help Workshop), некоторых записей реестра , некоторых переменных среды (например, %VS90COMNTOOLS%) и так далее. При необходимости он (пере) определяет некоторые переменные окружения (например, %LIBPATH% и даже %PATH%), используя команду set .

Согласно справочнику командной строки, %comspec% запускает новый экземпляр интерпретатора команд (cmd.exe). К сожалению, любые внесенные в переменные среды изменения не затронут другие сеансы CMD, которые уже запущены на компьютере!

Следовательно, использование call "...\vcvarsall.bat" x86 (обратите внимание на " кавычки не в два раза.) Чтение: call вызывает одну пакетную программу из другой, не останавливая родительскую пакетную программу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .