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

在程序中调用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;
        }
时间: 2024-10-12 22:24:48

C# 调用命令行,参数有空格的相关文章

mysql命令行参数

一,mysql命令行参数 Usage: mysql [OPTIONS] [database] //命令方式 -?, --help //显示帮助信息并退出 -I, --help //显示帮助信息并退出 --auto-rehash //自动补全功能,就像linux里面,按Tab键出提示差不多,下面有例子 -A, --no-auto-rehash //默认状态是没有自动补全功能的.-A就是不要自动补全功能 -B, --batch //ysql不使用历史文件,禁用交互 (Enables --silent

关于命令行参数

MFC命令行参数获取 int  nNum= 0; LPWSTR*  lp=CommandLineToArgvW(GetCommandLineW(), &nNum); ASSERT(0); for (int i = 0;i<nNum;i++) { AfxMessageBox(lp[i]); } 当用aa.bat调用aa.exe或者在命令提示符下输入"aa.exe -999"的时候,aa.exe收到的第1个命令行参数是exe的路径,第2个是-999 当用CreateProce

命令行参数(argc, argv)

每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点.当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数.第一个参数int argc,表示命令行参数的个数.第二个参数char *argv[],是一个指向命令行参数的指针数组,每一参数又都是以空字符(null) 结尾的字符串.第一个字符串,亦即argv[0]指向的,(通常)是该程序的名称.argv中的指针列表以NULL指针结尾(即argv[argc]为NU

Python 的命令行参数处理 optparse-&gt;argparse

optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代. 但是用习惯了optparse,还是很好用的撒. optparse使用起来,相比旧的getopt模块,更方便.灵活而且解析命令行选项的库功能强大. optparse使用声明样式的命令行解析:你创建一个OptionParser实例,填充选项,并解析命令行. optparse允许用户使用在传统GNU / POSIX语法的选项,而且会生成的使用和帮助信息(就是你没有显式的定义-h/--

Linux 程序设计学习笔记----命令行参数处理

转载请注明出处.http://blog.csdn.net/suool/article/details/38089001 问题引入----命令行参数及解析 在使用linux时,与windows最大的不同应该就是经常使用命令行来解决大多数问题.比如下面这样的: 而显然我们知道C语言程序的入口是mian函数,即是从main函数开始执行,而main函数的原型是: int main( int argc, char *argv[] ); int main( int argc, char **argv );

Linux环境编程之进程(一):main函数调用、进程终止以及命令行参数和环境表

(一)main函数调用 main函数作为程序运行时的入口函数,它是如何被调用的呢?首先必须清楚一点,main函数也是一个函数,它只有被调用才能够执行.其实,在执行可执行程序时,在调用main函数之前,内核会先调用一个特殊的启动例程,将此启动例程作为可执行程序的起始地址.启动例程是如何作为可执行程序的起始地址的?这是由链接编译器设置的,而链接编译器则是由C编译器(如gcc编译器)调用的.启动例程作为可执行程序的起始地址主要做哪些工作呢?启动例程从内核取得命令行参数和环境变量值,以此来为main函数

Shell特殊变量:Shell $0, $#, $*, [email&#160;protected], $?, $$和命令行参数

变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运行结果 29949 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. [email protected] 传递给脚本或函数的所有参数.被

命令行参数

1sys.argv 描述:记录命令行参数 类别:列表(可以使用列表方法来访问) #!/usr/bin/env python import sys def main(argv): for arg in argv: print arg if __name__ == '__main__': main(sys.argv) 那我们开始调用测试脚本: python PyTest.py 输出结果:PyTest.py, 原始列表为['PyTest.py'] python PyTest.py -c 0 a:1:b

Python 命令行参数和getopt模块详解

1.需求来源 有时候我们需要写一些脚本处理一些任务,可能根据不同的条件输入不同的命令,来完成不同的任务.能不能做到跟linux操作系统一样,看着更高大上一点呢? 答案当然是可以的啦!getopt能满足你的需求 先看个linux 中的系统命令吧:最终目的就是写出类似的脚本. 2.getopt介绍 getopt这个函数 就是用来抽取 sys.argv 获得的用户输入来确定执行步骤. getopt是个模块,而这个模块里面又有getopt 函数,所以getopt需要这样这样用. getopt.getop