#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 件のコメント:
コメントを投稿