C# 调用命令行,参数有空格

简介: 在程序中调用cmd命令打开一个文件,而文件路径带有空格,如果直接把路径传给cmd,那么cmd就会把路径空格前面的部分当做是一个参数,空格后当做另一个参数,命令行执行把后边截掉了,导致程序出错,会弹出了C:\Program 不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示。

 在程序中调用cmd命令打开一个文件,而文件路径带有空格,如果直接把路径传给cmd,那么cmd就会把路径空格前面的部分当做是一个参数,空格后当做另一个参数,命令行执行把后边截掉了,导致程序出错,会弹出了C:\Program 不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示。解决方法是把传入的参数前后添加双引号,如下:

 

  private static void ResxToRes(ArrayList ResxPath)
        {
            //ResxFile 是一个文件夹,用来存放 需要转换的.resx 文件 string s = ""; Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.CreateNoWindow = false; p.Start(); // + '"' + '"' + 可以用 \"\" 替换 // p.StandardInput.WriteLine("%comspec% /k " + '"' + '"' + @"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin" + '"' + '"'); // p.StandardInput.WriteLine("%comspec% /k " + '"' + '"' + @"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" + '"' + '"' + " x86 "); // p.StandardInput.WriteLine(@" cd C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin"); for (int i = 0; i < ResxPath.Count; i++) { string Filename = ResxPath[i].ToString(); //根据需要写相应算法生成文件名; ////resgen E:\Filename1.resx e:\ResName1.resources // p.StandardInput.WriteLine("ResGen" + Filename + " " + System.IO.Path.GetFileNameWithoutExtension(Filename) + @".resx");\string string ResName =Path.GetFullPath(Filename)+ ".resx"; string str = "\""+@"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ResGen.exe"+"\"" + " " + Filename + " " + ResName; p.StandardInput.WriteLine(str);//参数带有空格 应加上引号处理 p.StandardInput.WriteLine(" "); } //此处要exit两次 //退出visual studio 到 cmd.exe p.StandardInput.WriteLine("exit"); //退出cmd.exe p.StandardInput.WriteLine("exit"); p.WaitForExit(); s = s + p.StandardOutput.ReadToEnd(); p.Close(); // return s; }
 public static string startcmd(string command)
        {
            string output = "";
            try
            {
                Process cmd = new Process();
                cmd.StartInfo.FileName = command;
                cmd.StartInfo.UseShellExecute = false;
                cmd.StartInfo.RedirectStandardInput = true;
                cmd.StartInfo.RedirectStandardOutput = true;
                cmd.StartInfo.CreateNoWindow = true;
                cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                cmd.Start();
                output = cmd.StandardOutput.ReadToEnd();
                Console.WriteLine(output);
                cmd.WaitForExit();
                cmd.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return output;
        }

        public static string startcmd(string command, string argument)
        {
            string output = ""; 
            Process cmd = new Process();
            try
            {
              
                cmd.StartInfo.FileName = command;
                cmd.StartInfo.Arguments = argument;
                cmd.StartInfo.UseShellExecute = false;
                cmd.StartInfo.RedirectStandardInput = true;
                cmd.StartInfo.RedirectStandardOutput = true;
                cmd.StartInfo.CreateNoWindow = true;
                cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                cmd.Start();
                output = cmd.StandardOutput.ReadToEnd();
                Console.WriteLine(output);
                cmd.WaitForExit();
                cmd.Close();
            }
            catch (Exception e)
            {
                cmd.Close();
                Console.WriteLine(e);
            }
            return output;
        }

 

相关文章
|
7月前
|
存储 编解码 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
91 0
|
6月前
|
存储 Java 编译器
C# 变量与参数详解
C# 变量与参数详解
|
C#
C#小知识之中英文转换、去空格
# 一、中英文转换 ## 1、安装NPinYin ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231031-1f77b9b6.png?x-cos-security-token=kcWkaWALSQ5t0gKzZRkVwYOOBJMLQ8Ra8df6748cc017b8b22443671efb8aed172ct0qMmH-Si3jPfLmVc91udBHTdfdp2n1Qk-hBfLRQF5l22U2cHOMKfU7b0bWfl1t
209 0
C#小知识之中英文转换、去空格
|
7月前
|
开发框架 小程序 .NET
C#动态生成带参数的小程序二维码
C#动态生成带参数的小程序二维码
|
7月前
|
存储 C#
C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析
方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。
149 0
|
C# 数据安全/隐私保护
C# 窗体之间参数互相传递的两种方法与使用
C# 窗体之间参数互相传递的两种方法与使用
|
存储 API C#
Baumer工业相机堡盟工业相机如何通过文件保存和导入的方式保存和载入相机的各类参数(C#)
Baumer工业相机堡盟工业相机如何通过文件保存和导入的方式保存和载入相机的各类参数(C#)
85 0
|
存储 编解码 开发工具
Baumer工业相机堡盟工业相机如何通过BGAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
62 0
|
数据挖掘 编译器 C#
【C#本质论 五】方法和参数
【C#本质论 五】方法和参数
69 0