-3

我有这个方法

private void _executeCommand(string commandStr, int timeout)
         {

            try
            {
               System.Diagnostics.ProcessStartInfo procStartInfo =
                   new System.Diagnostics.ProcessStartInfo("cmd", "/c " + commandStr);
               procStartInfo.RedirectStandardOutput = true;
               procStartInfo.UseShellExecute = false;
               // Do not create the black window.
               procStartInfo.CreateNoWindow = true;
               // Now we create a process, assign its ProcessStartInfo and start it
               System.Diagnostics.Process proc = new System.Diagnostics.Process();
               proc.StartInfo = procStartInfo;
               proc.Start();
               Thread.Sleep(timeout);

            }
            catch (ExecutionEngineException e)
            {

               throw e;

            }}

不知何故,如果我传递一个名为myCmd,的字符串_executeCommand(myCmd, timeout),它什么也不做。但是,如果我传递 , 的确切字符串值myCmd_executeCommand("copy //data//file \"C://Program Files/myApp\"", timeout)它就能够执行。谁能看到问题是什么?

4

1 回答 1

0

如果您的命令有自己的参数,您想使用 /c 执行,则需要将整个命令及其参数括在 /c 之后用引号引起来。此外,如果您使用的路径包含空格作为命令的参数之一,您也必须引用它,即@"/c ""copy ""C:\My Folder\Ny File.txt"" ""C:\My Other Folder"""""

此外,如果您希望它执行多个命令,则必须将命令放在批处理文件中并执行该命令,或者将它们括在引号中并用 && 分隔它们,即@"/c ""cd \ && dir""".

请注意,我的示例中的双引号是在 C# 中使用字符串文字时如何转义引号。前面@的字符串告诉编译器按字面意思获取字符串,而不是将\字符解释为特殊字符。

看看我对在 C# 中将命令发送到 cmd 提示符的回答可能也是一个好主意,因为它解释了很多关于这些东西是如何工作的。

于 2012-11-07T19:25:35.613 回答