-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の後に引用符で囲む必要があります。さらに、コマンドの引数の1つとしてスペースを含むパスを使用している場合は、それも引用符で囲む必要があります。@"/c ""copy ""C:\My Folder\Ny File.txt"" ""C:\My Other Folder"""""

また、実行するコマンドが複数ある場合は、コマンドをバッチファイルに入れて実行するか、引用符で囲んで&&で区切る必要があります@"/c ""cd \ && dir"""

私の例で引用符を2倍にすることは、C#で文字列リテラルを使用するときに引用符をエスケープする方法であることに注意してください。上記@の文字列は、文字列を文字通りに解釈し、\文字を特殊文字として解釈しないようにコンパイラーに指示します。

C#でコマンドをcmdプロンプトに送信することに対する私の答えを見てみると、これがどのように機能するかについて多くのことを説明しているので、おそらく良い考えです。

于 2012-11-07T19:25:35.613 に答える