2016-02-05 143 views
0

我在Visual Studio中創建了一個後期構建腳本,我試圖運行該腳本,以便可以使遠程部署更加輕鬆。在這個腳本的早些時候(你在這裏沒有看到它),我們在下面的網絡使用執行中對用戶進行硬編碼。因此,我們在這裏所做的是讓用戶輸入要部署到的服務器名稱和數據庫,然後連接到該服務器的網絡共享。命令提示符執行命令的方式與批處理文件和Visual Studio後生成腳本不同

但是我發現,雖然只有在使用命令提示符運行時,下面的代碼才能正常工作。它打開一個新窗口並讓用戶放入服務器和數據庫,然後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%" 
+0

爲什麼所有'start'和'call' - 這些都用於異常情況。此外,這一切都在1線,沒有理由。修復你的代碼,看看會發生什麼。並轉儲所有'cmd/c'。 – 2016-02-05 06:14:31

+0

CALL是我用來解決第三條語句的問題,首先在命令提示符中沒有獲得%SERVERNAME%的值。如果我沒有這些調用,那麼該變量仍然會解析爲%SERVERNAME%。我必須在Post Build事件的開始處有start和/或cmd,因爲如果我不這樣做,那麼Visual Studio不會爲用戶提示打開任何內容,只是掛起,這也是類似的原因,線。 – NPVinny

回答

0

按照@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的運行時間值的方式。

+0

%user%是在我們的構建後腳本(SET USER = avhost \ vanderson_avctr)中早期設置的硬編碼變量。 如果我將SETLOCAL ENABLEDELAYEDEXPANSION和其餘的版本分開到批處理版本的單獨行中,但是對於Visual Studio,它仍然會在我嘗試通過用戶輸入設置變量時遇到以前遇到的問題,它只是掛起並且不會執行「打開任何東西。 – NPVinny

相關問題