簡體   English   中英

從C#應用程序執行cmd時維護變量

[英]Maintaining variables when executing cmd from C# application

我想從.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提示符不會返回。

我以為我可以將cmd1和cmd2翻倍到一個調用,但是隨后我需要為每次對cmd提示的調用做同樣的事情,並且一次又一次地調用C:\\ setenv.bat感到有點多余。

您可以在此問題中使用方式

例如,在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)從一個執行到下一個執行需要跟蹤多少個值? 首先,您可以僅使用錯誤級別返回值還是需要更多詳細信息?

2)您能否將第一個呼叫的結果作為一個呼叫直接傳遞給第二個呼叫?

3)您可以將第一個調用中的值輸出到文件中,然后在第二個調用中將其輸入到第二個cmd中嗎?

4)我假設您在運行第一個cmd之后但在調用第二個cmd之前完成了一些處理。 您能否創建一個可以由進行該處理的第一個批處理文件(在其他代碼之后)調用的.exe。 這樣,您就有了3個cmd,它們都可以在同一環境中運行,並且變量始終存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM