Csahrp Arg Test

前言

命令行参数在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}

Hugo Commands
Windows 右键菜单管理