Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将引号字符(“)作为C#控制台应用程序参数传递_C#_Console Application - Fatal编程技术网

将引号字符(“)作为C#控制台应用程序参数传递

将引号字符(“)作为C#控制台应用程序参数传递,c#,console-application,C#,Console Application,我有一个项目来演示一个类似于MS-DOS命令行中的“echo”命令的程序。下面是C#中的代码: 这在做它应该做的事情上是非常有效的。然后我开始尝试以任何方式利用它 在命令提示符下,我运行了arguments.exe“,这应该是打印出来的”。但事实并非如此。然后,我通过运行echo“,尝试了echo命令,并像预期的那样,打印出了”。这是令人难以置信的,因为我甚至没有想到这会是一个问题。我无法让它构成巨大的威胁,只是让我困惑了一分钟 我的问题是,有没有办法将引号(“)作为参数传递给这个控制台应用程序

我有一个项目来演示一个类似于MS-DOS命令行中的“echo”命令的程序。下面是C#中的代码:

这在做它应该做的事情上是非常有效的。然后我开始尝试以任何方式利用它

在命令提示符下,我运行了
arguments.exe“
,这应该是打印出来的
。但事实并非如此。然后,我通过运行
echo“
,尝试了
echo
命令,并像预期的那样,打印出了
。这是令人难以置信的,因为我甚至没有想到这会是一个问题。我无法让它构成巨大的威胁,只是让我困惑了一分钟

我的问题是,有没有办法将引号(
)作为参数传递给这个控制台应用程序


下面是一张更好地演示它的图片:

要获得单引号,您需要在填充args数组时绕过CLR执行的默认解析。您可以通过检查
环境.CommandLine
来实现这一点,在上面描述的情况下,它将返回以下内容:

ConsoleApplication1.exe\”

注意,我传递的参数只是
(不是所示的转义变量)

args
array此处包含已传递给应用程序的参数。因为参数可能有空格,所以可以用引号括起来

因此,您将无法获得作为参数放置的字符串。您还将在引用的参数之间释放任意数量的空格

如果需要原始命令行字符串,请使用:

string cmdline = System.Environment.CommandLine;

你好黑色维京Pro…我不知道为什么它会打印一个“字符”。作为命令行参数,“字符”表示字符串的开头,下一个字符表示字符串的结尾,如果您要打印“字符”,则需要将\character放在其中。如果您提供echo \“它将打印出echo”。。。我认为这是最重要的用于在命令行参数中括起字符串的字符。@JohnG你说得对。您的观点在Unix中是有效的。但是,我还发现,如果只使用一个引号作为参数,Windows
echo
命令会奇怪地打印出该引号!你可以自己试试。@BlackVikingPro我觉得你实际上是在“执行”echo命令。。。这不是这里发生的事情。。。您正在打印命令。。。不执行it@BlackVikingPro当我提供echo作为参数时。。。它打印echo@JohnG看屏幕截图,他正在使用DOS echo命令。我已经看过了,可以确认
不会以args的形式传递给正在执行的进程,在
环境中也不可用。GetCommandLineArgs
。我想总结一下,CLR的一个功能是对args执行一些基本的解析,但是我找不到关于它的文档。这很好,尽管它打印出带有消息的文件名,使我的参数/?没用。如何修复此问题?只需从表示命令行的字符串中“剪切”文件名。例如,使用cmdline=cmdline.substring(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName.length)。顺便说一句:请注意首先检查是否传递了任何参数,否则switch语句将引发异常,因为您通过args[0]访问第一个参数时没有指定任何参数。
\“
是一个单引号,它只是在调试器中显示的方式。如果打印该字符串,将只看到
void Main(string[] args)
string cmdline = System.Environment.CommandLine;