簡體   English   中英

C#中的命令行輸出驗證

[英]command line output validation in c#

我在實際命令提示符下的輸出如下所示:

Name:   My Software
Version:  1.0.1
Installed location: c:\my folder

我正在嘗試通過C#代碼獲取此輸出

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + "my command to execute");   

// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = 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();
proc.StartInfo = procStartInfo;
proc.Start();

// Get the output into a string
string result = proc.StandardOutput.ReadToEnd();
string[] lines = result.Split(new string[] { System.Environment.NewLine, }, System.StringSplitOptions.None);
foreach (string tmp in lines)
{
    if (tmp.Contains("Version"))
    {
        isAvailable= true; 
    }
}

我不想只檢查一個版本標記,我試圖獲取版本值並進行比較,例如,如果該值為1.0.1,則我想要該值並與2.0.0進行比較。

我可以使用indexof (例如result.IndexOf("Version:"); )-但這不能使我獲得版本的價值

任何想法都會有所幫助。

您應該使用.NET版本類,並且使用CompareTo(Object)方法進行比較。

var input = new Regex(@"(?<=Version:)\s*(.*)").Matches(@"Name:   My Software
Version:  1.0.1
Installed location: c:\my folder")[0].Value.Trim();

var a = new Version(input);
var b = new Version("2.0.0");

int comparison = a.CompareTo(b);

if(comparison > 0)
{
    Console.WriteLine(a + " is a greater version.");
} 
else if(comparison == 0)
{
    Console.WriteLine(a + " and " + b +" are the same version.");
}   
else
{
    Console.WriteLine(b + " is a greater version.");
}
string versionText;
var stuff = tmp.Split(":");
if(stuff[0].Trim() == "Version")
{
    isAvailable = true;
    versionText = stuff[1].Trim();
}

if(versionText == expectedVersionText)  // Do something specfic.

嘗試如下...它將為您提供幫助...

通過使用IndexOf而不是Contains檢查單詞。

if (tmp.IndexOf("Version") != -1)
{
isAvailable = true;
string[] info = tmp.Split(':');
string version = info[1].Trim();
Console.WriteLine(version);
}

您可能要使用正則表達式:

^Version:\s*(.*)$

應該與括號內的版本號匹配。

            string sought = "Version:";
            foreach (string tmp in lines)
            {
                if (tmp.Contains(sought))
                {
                    int position = tmp.IndexOf(sought) + sought.Length;
                    string version = tmp.Substring(tmp.IndexOf(sought) + sought.Length);
                    string[] versionParts = version.Split('.');
                    VersionCompare(versionParts, new string[]{"2", "0", "0"});
                }
            }
/// <summary>Returns 0 if the two versions are equal, else a negative number if the first is smaller, or a positive value if the first is larder and the second is smaller.</summary>
private int VersionCompare(string[] left, string[] right)
{
    for(int i = 0; i < Math.Min(left.Length, right.Length); ++i)
    {
        int leftValue = int.Parse(left[i]), rightValue = int.Parse(right[i]);
        if(leftValue != rightValue) return leftValue - rightValue;
    }
    return left.Length - right.Length;
}

暫無
暫無

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

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