gpt4 book ai didi

c++ - 如何将批处理文件的输出读入 C++ 中的字符串

转载 作者:行者123 更新时间:2023-11-30 03:15:04 24 4
gpt4 key购买 nike

我正在尝试制作一个小程序,它将创建一个批处理文件,在其中执行一些操作,然后从中返回一个字符串,然后删除该批处理。

我想将批处理文件的输出存储在变量 line 中.

我尝试使用 getline()但我认为它只适用于 .txt 文件。我可能是错的。

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

int main(int argc, char *argv[]) {
ofstream batch;
string line;

batch.open("temp.bat", ios::out);
batch <<"@echo OFF\nwmic os get caption /value\nwmic path win32_videocontroller get description /value\npause\nexit";
batch.close();

system("temp.bat");
remove("temp.bat");
};

在我的代码中,我只使用了 system与我的批处理文件。我想使用 cout<<line .

我希望字符串名为 line将等于批处理文件的输出。

最佳答案

使用 system() 时需要重定向输出:

#include <cstdio>   // std::remove(const char*)
#include <cstdlib> // std::system(const char*)
#include <fstream>
#include <iostream>
#include <string>
#include <unordered_map>

int main()
{
std::string foo_bat = "foo.bat";
std::string foo_out = "foo.out";

// Write the batch file
{
std::ofstream f( foo_bat );
f << R"z(
@echo off
wmic os get caption /value
wmic path win32_videocontroller get description /value
)z";
}

// Execute the batch file, redirecting output using the current (narrow) code page
if (!!std::system( (foo_bat + " | find /v \"\" > " + foo_out + " 2> NUL").c_str() ))
{
// (Clean up and complain)
std::remove( foo_bat.c_str() );
std::remove( foo_out.c_str() );
std::cout << "fooey!\n";
return 1;
}

// Read the redirected output file
std::unordered_map <std::string, std::string> env;
{
std::ifstream f( foo_out );
std::string s;
while (getline( f >> std::ws, s ))
{
auto n = s.find( '=' );
if (n != s.npos)
env[ s.substr( 0, n ) ] = s.substr( n+1 );
}
}

// Clean up
std::remove( foo_bat.c_str() );
std::remove( foo_out.c_str() );

// Show the user what we got
for (auto p : env)
std::cout << p.first << " : " << p.second << "\n";
}

WMIC is a problematic program when it comes to controlling the output code page ,因此我们在 system() 中使用了奇怪的管道技巧。

但是,毕竟,you should use the WMI API directly to get this kind of information .

关于c++ - 如何将批处理文件的输出读入 C++ 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57327940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com