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

ここで 2 つの質問をしました。それらを分割して、2 つの別個の 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

または、テストを実行するためだけに 2 つ目のバッチ ファイルを作成することもできます。たとえば、それ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 に答える