#include <boost/regex.hpp> #include <string> #include <iostream> #define WIN32_LEAN_AND_MEAN #include <windows.h> std::string getEnvValue(const std::string& str) { std::string result; std::string inp = str.substr( 1, str.size() - 2 ); //std::cout << inp << std::endl; char buf[ 4096 ]; DWORD sz = sizeof(buf); if( GetEnvironmentVariable( inp.c_str(), buf, sz ) > 0 ) { result = buf; } return result; } bool replaceEnv(std::string& str) { boost::regex r("(%[a-zA-Z0-9_]+%)"); boost::smatch m; if( boost::regex_search(str, m, r) ) { std::string eval = m.str(1); std::string sval = getEnvValue( eval ); while( std::string::npos != str.find(eval) ) { str.replace( str.find(eval), eval.size(), sval ); } return true; } return false; } int main(int argc, char* argv[]) { std::string str = "%USERPROFILE%\\hoge\\fuga"; while( replaceEnv( str ) ) {} std::cout << str << std::endl; return 0; }
2017年12月19日火曜日
Windows 環境変数適用 備忘録
環境変数を値に置き換える
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿