如何使用c#将参数传递给批处理文件

时间:2013-12-17 06:38:16

标签: c# batch-file

我有一个控制台文件,它有6个参数

enter image description here

要运行此exe,我创建一个批处理文件

enter image description here

现在,我需要将此参数从我的一个Windows应用程序发送到批处理文件。这是代码:

         string consolepath = @"E:\SqlBackup_Programs\console-backup\Backup_Console_App";
            string Pc = "VARUN-PC";
            string database = "Smart_Tracker";
            string UserName = "sa";
            string Password = "admin@12";
            string bacPath = @"D:\TEST";

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = System.Configuration.ConfigurationManager.AppSettings["BATCH_FULLBACKUP"].ToString().Trim();
            proc.StartInfo.Arguments = String.Format(consolepath,Pc,database,UserName,Password,"F",bacPath);
            //set the rest of the process settings
            proc.Start();

但它不起作用。我试图改变我的批处理文件,如

@echo off  %1%2%3%4%5%6%7

@echo off

但这也不起作用。

错误图片:

2 个答案:

答案 0 :(得分:6)

Arguments应为seperated space

方法1:

proc.StartInfo.Arguments =consolepath+" "+Pc+" "+database+" "+UserName+" "+Password+" "+"F"+" "+bacPath;

方法2:使用String.Format()

proc.StartInfo.Arguments =String.Format("{0} {1} {2} {3} {4} {5} {6}",consolepath,Pc,database,UserName,Password,"F",bacPath);  

解决方案2:您不应在批处理文件中对参数值进行硬编码

试一试:按以下方式更改批处理文件

%1 %2 %3 %4 %5 %6 %7

答案 1 :(得分:4)

您缺少String.Format调用的格式。

proc.StartInfo.Arguments应该更像

String.Format("{0} {1} {2} {3} {4} {5} {6}",  consolepath,Pc,database,UserName,Password,"F",bacPath);

但是,请记住,您的参数可能包含空格。我会这样做。

var args = new string[] { consolepath,Pc,database,UserName,Password,"F",bacPath };
var startupInfo = String.Join(" ", args.Select(x => "\"" + x + "\""));