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

Powershell 执行后如何退出批处理文件,powershell,batch-file,console-application,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-2

我正在编写一个批处理文件,以自动运行一些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也会调用其他应用程序

请帮助退出安装程序

添加echo后|

我在控制台上收到以下错误


假设您在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

我用自己编写的一个简单的控制台应用程序测试了这一点。顺便说一句,这使用PSCX PowerShell社区扩展中的一个命令,名为Set-foregroughindow。如果您不想依赖PSCX,那么实现非常简单。

您尝试过echo | myEXEFile.exe吗?我有更新批处理文件代码请建议如何编写echo | myEXEFile.execho | D:\Tethys\S…。\TethysDatabaseUtility.exe安装。。。其思想是通过管道将echo命令中的CRLF作为标准输入传输到控制台应用程序。根据Console.ReadKey的实现方式,它可以工作也可以不工作。您在问题中编写的消息与屏幕截图或c代码不匹配。不幸的是,管道无法工作,因为ReadKey尝试获取控制台输入缓冲区的句柄,并且它已被重定向。您需要修改应用程序代码,添加一个常规参数来处理这种情况,或者将有问题的代码更改为if!Console.IsInputRedirected Console.ReadKey抱歉,.Net 4.5或添加代码以处理错误。或者您可以使用一些东西将击键发送到应用程序,如Keith Hill所回答的,或者我在编辑后发布了一些c代码。针对ReadKey和works进行测试