从Windows命令提示符将stdin发送到进程

myf*_*wik 8 windows console stdin

在Windows中,我有一些控制台程序在后台运行且隐藏了控制台。无论如何,有直接输入到程序控制台的信息吗?我希望能够执行以下操作:

echo Y| *the_running_process_here*
Run Code Online (Sandbox Code Playgroud)

将Y发送到流程的标准输入。

Mar*_*ndt 2

据我所知,通过基本cmd命令这是不可能的。电源外壳更强大,可以使用 Windows 中的 .NET 框架。

我发现这个 PowerShell 脚本声称将文本传递给已经打开的cmd:

$psi = New-Object System.Diagnostics.ProcessStartInfo;
$psi.FileName = "cmd.exe"; #process file
$psi.UseShellExecute = $false; #start the process from it's own executable file
$psi.RedirectStandardInput = $true; #enable the process to read from standard input

$p = [System.Diagnostics.Process]::Start($psi);

Start-Sleep -s 2 #wait 2 seconds so that the process can be up and running

$p.StandardInput.WriteLine("dir"); #StandardInput property of the Process is a .NET StreamWriter object
Run Code Online (Sandbox Code Playgroud)

来源:/sf/answers/1127014031/

你必须用一个来保护这个脚本.ps1结尾保护此脚本并运行它。

将其用作cmd命令的解决方法是使其接受参数,以便您可以使用以下命令运行它yourScript.ps1 procced_pid arguments。

标准窗口的cmd局限性太大,无法单独完成这样的任务。