前言
命令行参数在csharp中有专门的类库,https://github.com/commandlineparser/commandline \
不过这个文章从底部的原理开始,不使用这么多功能的类库,并实现简单的参数处理功能。
csharp 接受命令行参数(简单例子)
csharp 接受的命令行参数其实就是一个 string 数组:
这是一个简单接受参数输入的程序
1static void Main(string[] args)
2{
3 // 判断是否有传入参数
4 if (args.Length > 0)
5 {
6 // 使用参数 args[0]
7 for (int i = 0; i < args.Length; i++)
8 {
9 Console.WriteLine($"传入的参数 {i} 是: " + args[i]);
10 }
11 }
12 else
13 {
14 Console.WriteLine("没有传入参数。");
15 }
16 Console.ReadLine();
17}
你可以如下方式使用它
1.\CsahrpArgTest.exe -PentestReport "c:/a.docx"
输出结果如下
传入的参数 0 是: -PentestReport
传入的参数 1 是: c:/a.docx
传参测试脚本
为了方便测试,我编写了一个小脚本(powershell格式):
他的功能是 build 项目,然后运行程序,传入参数
1$originalPath = Get-Location
2Set-Location CsahrpArgTest/
3dotnet build
4echo --runcode:--------------------------------
5Set-Location bin/Debug/net7.0
6.\CsahrpArgTest.exe -PentestReport "c:/a.docx"
7
8# 恢复原始工作目录
9Set-Location $originalPath
传参-更实际的的例子
我们实际使用的程序中,更常见的是这样的参数传递方式:
1.\CsahrpArgTest.exe --pentestreport "c:/a.docx"
我们使用 switch 语句来处理参数 arg0
下面的例子函数中中包含:
- -h 的处理
- -p 的处理
- 未知参数的处理
1public static bool processArgs(string[] args)
2{
3 // 判断是否有传入参数
4 if (args.Length > 0)
5 {
6 string arg0 = args[0];
7 switch (arg0)
8 {
9 case "--help":
10 case "-h":
11 Console.WriteLine(@"帮助信息:
12 本软件可以使用参数如下:
13 --help, -h: 打印帮助信息
14 --pentestreport <path> ,-p <path>: 指定渗透测试报告路径并转换");
15 return true;
16 break;
17
18 case "--pentestreport":
19 case "-p":
20 if (args.Length > 1)
21 {
22 string reportPath = args[1];
23 Console.WriteLine("渗透测试报告路径:" + reportPath);
24 return true;
25 }
26 else
27 {
28 Console.WriteLine("未指定渗透测试报告路径");
29 return false;
30 }
31 break;
32
33 default:
34 Console.WriteLine("未知参数:" + arg0);
35 return false;
36 break;
37 }
38 }
39 else
40 {
41 Console.WriteLine("没有传入参数");
42 return false;
43 }
44}