C#中的命令行参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的命令行参数相关的知识,希望对你有一定的参考价值。

C#中的命令行参数是什么 可以通俗点说一下吗 谢谢

参考技术A 命令行参数的常见应用领域
1. 初始化程序
在CMD下输入这个命令 notepad d:\test.txt,此时记事本程序会判断D盘下有没有text.txt文件,如有则打开,如没有则提示是否要新建。2. 设置程序执行方式
我们在手工打OS补丁时,根据传入的参数可控制补丁程序的执行
以KB打头的补丁文件,参数可选/quiet/norestart/o,分别表示安装时无需用户参与、安装完成后不重启、不提示覆盖OEM文件。
以Q打头的补丁文件,参数可选/q/o/z,分别表示安装时无需用户干预、不提示覆盖OEM文件、安装完后不重新启动。命令行参数在C#中实现static void Main(string[] args)
...
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
args是一个参数数组,这个名字只代表参数的意思,可以换成任何符合C#命名规范的名字。
通过访问这个数组,即可得到各个参数。 示例 1
本示例演示如何输出命令行参数.
// cmdline1.cs
// arguments: A B C
using System;

public class CommandLine

public static void Main( string[] args )

// The Length property is used to obtain the length of the array.
// Notice that Length is a read-only property:
Console.WriteLine( "Number of command line parameters = 0",
args.Length );
for( int i = 0; i < args.Length; i++ )

Console.WriteLine( "Arg[0] = [1]", i, args[i] );



输出
使用如下所示的一些参数运行程序:cmdline1 A B C.
输出将为:
Number of command line parameters = 3
Arg[0] = [A]
Arg[1] = [B]
Arg[2] = [C]
示例 2
循环访问数组的另一种方法是使用 foreach 语句,如本示例所示.foreach 语句可用于循环访问数组或“.NET Framework”集合类.它提供了一种简单的方法来循环访问集合.
// cmdline2.cs
// arguments: John Paul Mary
using System;

public class CommandLine2

public static void Main( string[] args )

Console.WriteLine( "Number of command line parameters = 0",
args.Length );
foreach( string s in args )

Console.WriteLine( s );



输出
使用如下所示的一些参数运行程序:cmdline2 John Paul Mary.

输出将为:
Number of command line parameters = 3
John
Paul
Mary
参考技术B 语句中的定义的变量!

将字符串拆分(不解析)到命令行参数 C# [重复]

【中文标题】将字符串拆分(不解析)到命令行参数 C# [重复]【英文标题】:Split (NOT PARSE) a string into command line args C# [duplicate] 【发布时间】:2017-02-07 09:06:05 【问题描述】:

问候,

我有一个看似简单的问题,但实际上并非如此。我想获取一个字符串并将其拆分为命令行参数。我已经在谷歌上搜索这个问题好几个星期了,找不到任何适合我需要的东西。

例如,以下行: --foo=bar -foo="bar test" --foo "bar \"test\"" --foo bar

将分为:(按此顺序)

--foo=bar -foo=bar test --foo bar "test" --foo bar

编辑

是的,我意识到 --foo 不止一次使用。这是拆分/标记化。不解析,这是下一步。我不在乎我去解析时是否会出错。我现在想做的是将字符串转换为数组状态,然后我可以将其输入 Mono.Options

编辑 2

阅读示例。这就是我想要完成的。 只是

【问题讨论】:

您是否创建了 MCVE? 为什么要拆分 args?这通常在您使用控制台执行应用程序时自动完成。然而,解析 args 有很多工具,例如 CommandLine-parser。 @HimBromBeere 这不是一次性应用程序。命令字符串将从套接字连接提供 @Cole - 最好在问题中明确你不是从实际命令行中得到这个但想要复制操作系统所做的解析。 @Cole check this question 使用 String.Split 或正则表达式对命令行进行标记并非易事。基于字符的解析器要容易得多。 Windows 也为此提供了一个 Win32 API 函数,CommandLineToArgvW 【参考方案1】:

如果您正在运行控制台应用程序,命令行参数将传递给 Main 方法 (String[] args)。

无论如何,如果你想拆分你的参数,假设参数在一个字符串变量中,你可以这样做:

var arguments = "--foo=bar -foo=\"bar test\" --foo \"bar \"test\" --foo bar";

var options = arguments.Split(new String[]  "-", "--" , StringSplitOptions.RemoveEmptyEntries);

// Output
// [0]: "foo=bar "
// [1]: "foo=\"bar test\" "
// [2]: "foo \"bar \"test\" "
// [3]: "foo bar"

【讨论】:

这也会拆分“bar test” 您需要检查 Split 方法的重载,使用这行代码: var array = arguments.Split(new String[] "-", "--" , StringSplitOptions.RemoveEmptyEntries);你得到 4 个参数 解析命令行比简单地拆分字符串要复杂一些。例如,此命令行包含单个参数foo四个 值。此外,一个好的解析器应该能够处理动词、动词参数和不同的参数标识符如/---。它应该能够处理带引号的值,这是 Split 无法做到的。即使是正则表达式也会遇到问题 所有这些都应该有一个易于使用的 API,这就是为什么使用 .NET 的 System.CommandLine、NDesk 或 CommandLineParser 等库来完成命令行解析的原因 @H.Herzl 您的方法会将-foo="bar hello" 拆分为-foo="hello AND hello"【参考方案2】:

只需使用Environment.GetCommandLineArgs()

这将为您提供代表命令行参数的字符串数组

【讨论】:

环境变量与命令行参数完全不同。可以使用Environment.GetCommandLineArgs 获取命令行参数。 sry...ment this :( 仍然不是 OP 想要的...... OP 已经有一个命令行。问题是,你如何解析它,即从中获取有意义的数据 @PanagiotisKanavos 如果通过解析您的意思是拆分/标记化,那么是的。你是对的

以上是关于C#中的命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中转义命令行参数

如何通过 c# 传递多个命令行参数

如何在 C# 中解析命令行参数 [重复]

在 C# 中解析命令行参数/选项

如何在 C# 中访问 Main 之外的命令行参数

如何在 C# 中读取另一个进程的命令行参数?