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