2016-02-05 144 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

相关问题