2
@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 命令提示符下更改目录并运行测试文件时遇到问题。上面的代码实际上不起作用

4

1 回答 1

5

你在这里问了两个问题。您应该将它们分开并将它们作为两个单独的 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
于 2013-08-15T14:08:18.330 回答