2012-02-11 8 views
11

PowerShellでプログラムを実行すると、新しいウィンドウが開き、出力が表示される前にウィンドウが閉じます。 PowerShellでこのウィンドウを開いたままにするにはどうすればよいですか?PowerShellでコマンドウィンドウを開いたままにするにはどうすればよいですか?

+0

は、このプログラムは、exeファイル、またはバッチファイルですか?おそらく実行ファイルの名前を変更して、あなたが実行している正確なコマンドを与えることができますか? –

+0

これはexeです。私は、プログラムが自分のパスに入っているフォルダを追加しました。実行するプログラムの名前を入力すると、それが開くウィンドウが閉じすぎて、それが私の言うことを読みにくくなります。このプログラムは、Pythonプログラムをテストするプログラムです。以下のコメントについては、バッチファイルでプログラムをラップする方法はわかりません。/ – Erman

+0

これを行う方法を明確にするために私の答えが更新されました。また、プログラムの出力をテキストファイルにリダイレクトすることもできます。 –

答えて

1

cmd /c foo.cmdコマンドで起動されたバッチファイル(.cmdまたは.bat拡張子)の場合は、単にcmd /k foo.cmdに変更してプログラムを実行しますが、プロンプトは開いたままです。

プログラムがバッチファイルでない場合は、バッチファイルにラップし、最後にpauseコマンドを追加します。バッチファイルでプログラムをラップするには、コマンドをテキストファイルに置き、.cmd拡張子を付けるだけです。その後、exeの代わりに実行します。

8

はやってみてください。必要に応じて

start-process your.exe -NoNewWindow 

-Waitを追加します。

+0

これを実行すると、 "Start-Process:Thisエラーのためコマンドを実行できません:指定されたファイルが見つかりません。 私はパスにexeの場所を追加したので、変です。 – Erman

+0

@エーマン - それが本当にあることを確認してください。必要に応じてPowershellを再起動します。または、フルパスを使用して何が起こっているかを確認してください。 – manojlds

+0

@Erman powershell.exeを入れたいと思っています。my.bat -NoNewWindow –

3

私は数週間前に同様の問題を解決していました。 &(& '.\program.exe')を使用しない場合は、startプロセスを使用して、開始プロセス(出力を明示的に読み込む)で出力を読み取ることができます。好き

param (
    $name, 
    $params 
) 

$process = New-Object System.Diagnostics.Process 
$proInfo = New-Object System.Diagnostics.ProcessStartInfo 
$proInfo.CreateNoWindow = $true 
$proInfo.RedirectStandardOutput = $true 
$proInfo.RedirectStandardError = $true 
$proInfo.UseShellExecute = $false 
$proInfo.FileName = $name 
$proInfo.Arguments = $params 
$process.StartInfo = $proInfo 

#Register an Action for Error Output Data Received Event 
Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived -action { 
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Red } 
} | Out-Null 

#Register an Action for Standard Output Data Received Event 
Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -action { 
    foreach ($s in $EventArgs.data) { Write-Host $s -ForegroundColor Blue } 
} | Out-Null 

$process.Start() | Out-Null 
$process.BeginOutputReadLine() 
$process.BeginErrorReadLine() 
$process.WaitForExit() 

をして、それを呼び出す:

.\startprocess.ps1 "c:\program.exe" "params" 

あなたはまた、簡単に出力をリダイレクトするか、いくつかの種類を実装することができます(またはマクロに)例えば -

はちょうどこのように独立したPS1のファイルを置きますあなたのアプリケーションがフリーズできる場合のタイムアウトの...

+0

パーフェクト。まさに私が探していたもの。ありがとう、トン。 – Saulius

4

OPは答えに満足しているようですが、プログラムを実行した後に新しいウィンドウを開いたままにしていません。尋ねる(そして私が探していた答え)。だから、いくつかの研究の後、私は思いついた:

Start-Process cmd "/c `"your.exe & pause `"" 
+2

PowerShellの純粋主義者の代わりに、cmdの代わりにpowershellを使うこともできます:Start-Process powershell "。EXE ; read-host 'Enterを押して続行してください。 "" – Cary

+1

私はこれを使います: 'Start-Process" powershell "-wait -ArgumentList" tree' D: ';一時停止 "。 – larkee

関連する問題