从C#应用程序执行cmd时维护变量

时间:2014-11-11 18:08:18

标签: c# .net cmd

我想从.net C#应用程序调用一些cmd提示命令。但是在运行命令之前,我需要在批处理文件中设置变量。有没有办法将变量维护到后续调用命令提示符?

我在下面提供了一个问题的例子。

说我有一个简单的批处理文件 C:\ setEnv.bat 包含

set notepad=C:\windows\system32\notepad.exe

然后,如果我有这样的C#代码:

var proc1 = new ProcessStartInfo();
string cmd1 = @"CALL C:\setEnv.bat";
string cmd2 = @"ECHO notepad=%notepad%>C:\test.txt";
proc1.UseShellExecute = true;

var process = new Process();
var startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C " +cmd1;
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
startInfo.Arguments = "/C " + cmd2;
process.Start();
process.WaitForExit();

现在我猜测 / C 正在终止命令提示符,从而丢失我的变量,但如果我没有它,那么在完成命令后cmd提示符不会返回。 / p>

我以为我可以加倍cmd1& cmd2到一个单独的调用,但是我需要为每次调用cmd提示符执行此操作,并且一次又一次地调用 C:\ setenv.bat 会感到有点多余。

2 个答案:

答案 0 :(得分:1)

您可以在此question

中使用

例如,在cmd1中使用命令“set”:

string cmd1 = "\" CALL C:\\setEnv.bat && set \"";
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
//...
process.Start();
string variables = process.StandardOutput.ReadToEnd();
// next parse variables string

在开始第二个进程之前,在“startInfo.EnvironmentVariables”

中设置已解析的变量

答案 1 :(得分:0)

一些问题/想法:

1)从一次执行到下一次执行需要跟踪多少个值?主要是,您可以使用errorlevel返回值还是需要更多详细信息?

2)您可以将第一个结果直接传输到第二个作为一个呼叫吗?

3)您可以将第一次调用的值输出到第二次调用吗?在第二次调用中输出管道作为第二次cmd的输入吗?

4)我假设您在运行第一个cmd之后但在调用第二个cmd之前完成了一些处理。你能创建一个可以由执行该处理的第一批文件(在其他代码之后)调用的.exe。这样,你有3厘米,所有这些都可以在相同的环境中运行,你的变量就会存在。