Командная строка выполняет команду не так, как командный файл и скрипт пост-сборки 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.