有没有办法从cmd字符串中复制字符串?

时间:2016-08-22 12:03:38

标签: c++ string cmd ping

我对编码很陌生。我需要退伍军人的建议,因为我这样做是为了完成我的任务。

有没有办法读取命令提示符(CMD)生成的字符串?

我的任务是创建一个代码来ping所有网络并通过输入/输出将IP地址分配为活动和非活动状态。

我想从cmd复制一个字符串,例如:

来自192.168.0.1的回复:bytes = 32 time< 1ms TTL = 64< - (表示有效) 来自192.168.0.2的回复:目标主机无法访问< - (这表示不活动)

如果我能够复制该行,我可以编写一个If / Else条件来分隔它们。如果有更简单的方法来改善这种情况,请帮助我。谢谢。

下面的代码是ping所有IP地址,直到255,但我还需要一个功能来分隔活动和非活动IP地址。

    using namespace std;

    void main()
    {
    string ipAddress;

    cout << "Enter the IPv4 address network..." << endl;
    cout << "Example: 10.0.0. or 192.168.1." << endl;

    getline(cin, ipAddress);
    cout << "Please wait..." << endl;

    string s = "ping " + ipAddress;

    for (int x = 0; x <= 255; ++x)
            {
                    stringstream ss;
                    ss << x << endl;
                    string newString = ss.str();
                    string finalString = s + newString;

                    system(finalString.c_str());
            }

    system("pause");
    }

P.S我也在http://www.cplusplus.com/forum/beginner/196197/

发帖

3 个答案:

答案 0 :(得分:1)

您可以使用popen功能。此功能允许您读取命令的输出。

就像马丁在评论中所说,在Windows上你会使用_popen,msdn doc:

msdn.microsoft.com/en-us/library/96ayss4b.aspx

从此页面查看linux的例子:

http://www.sw-at.com/blog/2011/03/23/popen-execute-shell-command-from-cc/

答案 1 :(得分:0)

enter image description here

这是从CMD复制的另一种方法。

以下代码使用内置函数system()

启动Windows自带的 ping.exe

system("ping www.google.com > ping.txt ")

并将控制台屏幕的输出重定向到文本文件

ping www.google.com > ping.txt 

并将其存储在名为 ping.txt 的文件中。然后打开该文件

//open text file ping.txt
ifstream TextFile ("ping.txt");

并输入一个字符串向量并显示。

// display ping results
for (int i=0;i<LinesFromtextFile.size(); i++){
   cout<<""<< LinesFromtextFile[i] <<"";
}

通过vector<string> LinesFromtextFile存储的ping内容,您可以随意使用它。

#include <windows.h>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>       
using namespace std;


int main () {

    int j=0;
    char *url = new char[256];
    string line;
    vector<string> LinesFromtextFile;

    memset(url,' ', sizeof(url) );
    strcpy(url, "ping www.google.com > ping.txt " );

    cout<<"\n\n"<< url <<"\n\n";

    // launch ping from visual c++
    system( url );

    //open text file ping.txt
    ifstream TextFile ("ping.txt");
    while (getline(TextFile, line)){

        // store lines from textfile into vector
        LinesFromtextFile.push_back(line);
        LinesFromtextFile[j] = LinesFromtextFile[j] +"\n";

        j++;
    }
    TextFile.close();

    // display ping results
    for (int i=0;i<LinesFromtextFile.size(); i++){
       cout<<""<< LinesFromtextFile[i] <<"";
    }
    delete[] url;


cout<<"\nPress ANY key to close.\n\n";
cin.ignore(); cin.get();
return 0;
} 

答案 2 :(得分:0)

如果由于某种原因不想使用_popen(),还有另一种方法:
您可以使用>filename语法将ping的输出重定向到文件。

例如,std::system("ping 8.8.8.8 >out.txt")会调用ping并将其输出到out.txt

此功能是Windows shell本身的一部分,因此它适用于任何程序。