如何从C#应用输出字符串并捕获到PowerShell或CMD变量中?
没问题!要实现这个需求其实很简单,核心就是让你的C#程序把要传递的字符串输出到标准输出(stdout),然后在CMD或者PowerShell里直接捕获这个输出就行。下面分两种环境给你具体的实现方案:
在CMD中捕获字符串变量
首先在你的C#代码里,用Console.WriteLine()或者Console.Write()把目标字符串输出到标准输出(别用Console.Error,那是错误输出流,CMD默认不捕获):
// C#示例代码 using System; class Program { static void Main() { // 输出要传递的字符串 Console.WriteLine("这是从C#程序输出的字符串内容"); // 如果需要无换行的输出,用Console.Write // Console.Write("无换行的输出内容"); } }
编译成可执行文件(比如MyApp.exe)后,在CMD里用for /f命令捕获输出并赋值给变量:
:: CMD命令 for /f "delims=" %%a in ('MyApp.exe') do set "output=%%a" :: 验证变量内容 echo %output%
说明:
delims=参数是为了保留包含空格的完整字符串,避免被CMD自动分割;如果你的C#程序输出多行内容,这个命令会把最后一行的内容赋值给output变量,要是需要处理所有行,可以在循环里添加逻辑。
在PowerShell中捕获字符串变量
C#代码和上面一样,用Console.WriteLine()输出字符串即可。在PowerShell里捕获输出更简单,直接把程序的执行结果赋值给变量:
# PowerShell命令 $output = .\MyApp.exe # 验证变量内容 Write-Host $output
说明:如果C#程序输出多行内容,
$output会是一个字符串数组,你可以通过索引(比如$output[0])获取指定行,或者用$output -join "n"把所有行合并成一个字符串。如果需要同时捕获错误输出,可以用$output = .\MyApp.exe 2>&1`。
额外提醒:Environment.Exit()只能传递整数错误码,用来返回执行状态(比如0表示成功,非0表示失败)非常合适,但传递字符串就得靠标准输出,这是脚本和程序之间传递字符串数据的常规方式。
内容的提问来源于stack exchange,提问作者Chives
相关产品推荐
相关产品推荐

