簡體   English   中英

如何從C#應用程序的批處理文件中讀取消息

[英]How to read message from batch file from C# application

我有一個批處理文件,它將文件從一個文件夾復制到另一個文件夾。 因此,我想從C#Windows服務運行此文件,然后我想閱讀腳本是否生成錯誤或腳本是否正確運行。 這是我午餐的代碼,但是我不知道如何閱讀腳本的消息:

腳本代碼:

REM
REM This script moves files with results from GOLD server and saves them on MES06 server on .
REM IMPORT folder.
REM
REM Robocopy Options:
REM /R:2     Two retries on failed copies (default is 1 million)
REM /W:5     Wait 5 seconds between retries (default is 30 sec).
REM
REM GOLD QAS Inbound Folder: \\goldqas01.app.pmi\limscihome$\RootDirectory
REM 


for /f "delims=: tokens=2,3" %%j in (F:\MES2GOLD\copy_list_test.txt) do ROBOCOPY.EXE %%j %%j\..\BACKUP *.* /R:2 /W:5 /log+:%%j\..\LOGS\MES2GOLD.log & ROBOCOPY.EXE %%j %%k *.* /R:2 /W:5 /MOV /log+:%%j\..\LOGS\MES2GOLD.log

PAUSE

C#代碼:

    public void execute(string workingDirectory, string command)
    {

        // create the ProcessStartInfo using "cmd" as the program to be run, and "/c " as the parameters.
        // Incidentally, /c tells cmd that we want it to execute the command that follows, and then exit.

        System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", @"/c C:\Users\mcastrio\Desktop\GOLD2MES.bat");

        procStartInfo.WorkingDirectory = workingDirectory;

        //This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = true;
        //This means that it will be redirected to the Process.StandardError StreamReader. (same as StdOutput)
        procStartInfo.RedirectStandardError = true;

        procStartInfo.UseShellExecute = false;
        // Do not create the black window.
        procStartInfo.CreateNoWindow = true;
        // Now we create a process, assign its ProcessStartInfo and start it
        System.Diagnostics.Process proc = new System.Diagnostics.Process();

        //This is importend, else some Events will not fire!
        proc.EnableRaisingEvents = true;

        // passing the Startinfo to the process
        proc.StartInfo = procStartInfo;

        // The given Funktion will be raised if the Process wants to print an output to consol                    
        proc.OutputDataReceived += DoSomething;
        // Std Error
        proc.ErrorDataReceived += DoSomethingHorrible;
        // If Batch File is finished this Event will be raised
        proc.Exited += Exited;
    }

我們可以幫我嗎?

您可以在循環內使用以下代碼:

var startInfo = p.StartInfo;
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = false;
startInfo.StandardOutputEncoding = Encoding.GetEncoding("ibm850");
startInfo.RedirectStandardOutput = true;
startInfo.FileName = filebatch;
startInfo.Arguments = arguments;

p.Start();
var output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

或僅使用TestSharp庫中的ProcessHelper.Run

ProcessHelper.Run(string exePath, string arguments = "", bool waitForExit = true)

暫無
暫無

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

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