@echo off
echo copy masterDB file from one directory to another one
copy "C:\dir\dbfile" "C:\dir1\dbfile"
cd c:\lvsdir
call lvsrun.bat
timeout /t 180
start %comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86
cd C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
MSTest /testcontainer: C:\testdir\test.dll
我想通过批处理文件将db文件从一个目录复制到另一个目录(执行正确),然后启动lvsrun.bat文件,该文件应启动lvs服务器, 然后在新窗口中打开visual studio命令提示符,在打开的命令提示符下更改目录以测试目录并运行测试文件。当我调用lvsrun.bat时会出现问题,并且它会卡在那里。无法打开新的vs命令提示符。在打开vs命令提示符下更改目录并运行测试文件时出现问题。上面的代码并没有真正起作用
答案 0 :(得分:4)
你在这里问了两个问题。你应该将它们分开并将它们作为两个单独的SO问题。
Q1。为什么我的批处理文件永远不会超过call lvsrun.bat
?
A1。因为call
在调用的批处理文件退出之前不会返回。如果要立即启动lvsrun.bat并继续执行,请使用start
。
copy "C:\dir\dbfile" "C:\dir1\dbfile"
cd c:\lvsdir
start "" "%comspec%" /k lvsrun.bat
Q2。为什么我启动的新命令窗口没有运行我的测试文件?
A2。您的批处理文件将仅控制其命令窗口。如果启动另一个命令窗口,那个窗口是独立的,则无法“发送”命令。但您可以在当前窗口中运行测试,而不是启动另一个:
:: Use "call" here to run vcvarsall.bat to set up the environment in this process
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
cd C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
MSTest /testcontainer: C:\testdir\test.dll
或者您可以制作第二个批处理文件,仅用于运行测试。例如,我们称之为runtest.bat
,并给它完全相同的行:
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
cd C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
MSTest /testcontainer: C:\testdir\test.dll
然后可以同步从原始批处理文件中调用:
call runtest.bat
或异步:
start "" "%comspec%" /c runtest.bat