有没有办法从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");
}
可以使用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/
这对OP不起作用。他特别说“CMD”是MS Windows命令行shell。他需要使用'_popen'(注意前导下划线),https://msdn.microsoft.com/en-us/library/96ayss4b.aspx是该规范的链接。 –
这是从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外壳本身的一部分,因此它将适用于任何程序。
你希望能够捕获你的'std :: system()'命令的输出吗? – Galik