Командная строка выполняет команду не так, как командный файл и скрипт пост-сборки Visual Studio

У меня есть скрипт пост-сборки в Visual Studio, который я пытаюсь запустить, чтобы мы могли упростить удаленное развертывание. Ранее в этом сценарии (вы его здесь не видите) мы жестко закодировали пользователя при выполнении net use ниже. Таким образом, все, что мы делаем здесь, - это чтобы пользователь вводил имя сервера и базу данных для развертывания, а затем подключался к сетевой папке этого сервера.

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

Если вы попытаетесь использовать это в пакетном файле или в Visual Studio, команда net use покажет пустое имя сервера.

Я ценю любое понимание, которое кто-либо может иметь по этому поводу!

START CMD /C "CALL SET /P SERVERNAME=Please Enter The Server Name: & CALL SET /P DATABASE=Please Enter The Database Name: & CALL CMD /C net use \\%SERVERNAME%\d$ /persistent:no * /user:%user%"

1 ответ

Следуйте советам @bgalea. Где определен% user%? Вы имели в виду%username%? Конечно, эта схема не будет работать, если вы планируете, чтобы сборки выполнялись агентом сборки позже.

Причина, по которой он не работает, заключается в том, что переменные раскрываются во время загрузки. Следовательно, %SERVERNAME% раскрывается при загрузке строки... ДО того, как пользователь ввел значение. Попробуйте перейти на это:

SETLOCAL ENABLEDELAYEDEXPANSION SET /P SERVERNAME=Please Enter The Server Name: & SET /P DATABASE=Please Enter The Database Name: & \\!SERVERNAME!\d$ /persistent:no * /user:%username%"

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

Другие вопросы по тегам