如何在C#中通过命令行参数传递Win32 type命令的输出?
如何将Win32 type命令的输出作为C#程序的命令行参数?
先说说你原来的命令哪里出问题了:你把C#代码编译和程序运行的逻辑混在一起,还直接把type Demo.json当作字符串参数传给程序,这就导致程序收到的只是Demo、type、Demo.json这些文本,根本没执行type命令去读取文件内容。
下面分两种场景给你正确的实现方式:
1. 在Windows命令提示符(CMD)中实现
CMD没有像Linux Shell那样直接的命令替换语法,得用for /f命令捕获type的输出,再传递给程序:
步骤1:先编译C#代码
先运行编译命令生成可执行文件:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Demo.cs
执行后会得到Demo.exe文件。
步骤2:用for /f传递type的输出作为参数
运行以下命令,就能把Demo.json的内容作为命令行参数传给Demo.exe:
for /f "delims=" %a in ('type Demo.json') do Demo.exe "%a"
delims=是为了保留JSON内容里的空格和特殊字符,避免被拆分成多个参数- 给
%a加双引号"%a",防止JSON里的空格导致参数被拆分
如果你的JSON文件有多行内容,CMD的for /f默认会逐行处理,这时候更推荐用下面PowerShell的方法来一次性传递完整内容。
2. 在PowerShell中实现
PowerShell支持直接的命令替换,实现起来更简单:
步骤1:编译代码
和CMD里的编译命令一致:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Demo.cs
步骤2:传递文件内容作为参数
用Get-Content(PowerShell里type是它的别名)加上-Raw参数,一次性获取整个文件的内容作为单个参数传递:
.\Demo.exe (Get-Content Demo.json -Raw)
或者用type的写法:
.\Demo.exe (type Demo.json -Raw)
-Raw参数很关键,它会把整个文件内容读取成一个完整的字符串,而不是按行拆分成多个元素,这样你的C#程序的args[0]就能拿到完整的JSON内容了。
验证效果
你的现有C#代码已经可以正常输出第一个命令行参数,运行上面的命令后,控制台就会输出{ "Message" : "Hello World" }了。
内容的提问来源于stack exchange,提问作者Kunal Mukherjee
相关产品推荐
相关产品推荐

