如何在执行后退出批处理文件

时间:2014-09-17 13:22:19

标签: powershell batch-file console-application

我正在编写一个批处理文件来自动运行一些EXE并退出控制台中的消息

"Press any key to continue .. "

批处理文件包含以下代码:

D:\\Tethys\\SVN\\build\\vs2010\\ReleaseWin32\\bin\\TethysDatabaseUtility.exe install       D:\Tethys\DatabaseInstaller\DatabaseInstaller\RGTestingUtility.cab "" NDI-LAP-262\SQL2008R2 TestDB-Neeraj N sa Brick@123 /c h:
D:\\Tethys\\SVN\\build\\vs2010\\ReleaseWin32\\bin\\TethysDatabaseUtility.exe install D:\Tethys\DatabaseInstaller\DatabaseInstaller\RGTestingUtilityTestCases.cab "" NDI-LAP-262\SQL2008R2 TestDB-Neeraj N sa Brick@123 
D:\\Tethys\\SVN\\build\\vs2010\\ReleaseWin32\\bin\\TethysDatabaseUtility.exe install D:\Tethys\DatabaseInstaller\DatabaseInstaller\RGTestingUtilityBaseLineData.cab "" NDI-LAP-262\SQL2008R2 TestDB-Neeraj N sa Brick@123 

在bat文件中使用的exe是控制台应用程序和代码编写

installer.run();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();

以上代码是必需的,所以我不更改代码,因为该控制台exe也调用了其他一些应用程序。

请帮助退出安装程序。

enter image description here

添加echo(|

我在console收到了以下错误。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用后台作业执行此操作(假设您使用的是V2或更高版本)。诀窍是使用Windows窗体SendKeys.SendWait()方法模拟正在等待按键的PowerShell窗口上的按键。您必须使用延迟,或者您可以修改作业脚本以检查指示安装程序已完成的内容。这是代码:

Start-Job {param($id) Add-Type -Assembly System.Windows.Forms
                      $hwnd = (Get-Process -id $id).MainWindowHandle
                      Start-Sleep -Seconds 10
                      Set-ForegroundWindow $hwnd
                      [Windows.Forms.SendKeys]::SendWait('{ENTER}') 
           } -ArgumentList $pid > $null

我用我编写的一个简单的控制台应用测试了这个。 BTW这使用来自PSCX(PowerShell社区扩展 - http://pscx.codeplex.com)的命令,称为Set-ForegroundWindow。如果您不想依赖PSCX,那么实现非常简单。