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

问题描述:

我完全不熟悉编码。我需要老手的建议,因为我为我的任务做了这些。有没有办法从cmd字符串复制字符串?

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

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

我想的字符串从CMD复制例如:

从192.168.0.1答复:字节= 32时间< 1ms的TTL = 64 < - (这表明活性)从192.168.0.2 答复:目标主机无法到达< - (这表明不活动)

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

下面的代码是ping所有IP地址直到255,但我仍然需要1个更多的功能来分隔活动和非活动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/

+0

你希望能够捕获你的'std :: system()'命令的输出吗? – Galik

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

像马丁说,在评论,在Windows中,您将使用_popen,MSDN文档:

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

见为例for Linux的这个页面:

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

+0

这对OP不起作用。他特别说“CMD”是MS Windows命令行shell。他需要使用'_popen'(注意前导下划线),https://msdn.microsoft.com/en-us/library/96ayss4b.aspx是该规范的链接。 –

enter image description here

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

下面的代码启动Windows自带的ping.exe的与内置的功能system()

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; 
} 

如果你因为某些原因不想使用_popen(),还存在另一种方式:
您可以使用>filename语法的ping输出重定向到一个文件中。例如,std::system("ping 8.8.8.8 >out.txt")将调用ping并将其输出写入out.txt

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