我想使用boost :: program_optionsparsing多个命令行参数。 但是,一些参数是用双引号括起来的string。 这是我的 –
void processCommands(int argc,char *argv[]) { std::vector<std::string> createOptions; boost::program_options::options_description desc("Allowed options"); desc.add_options() ("create",boost::program_options::value<std::vector<std::string> >(&createOptions)->multitoken(),"create command") ; boost::program_options::variables_map vm; boost::program_options::store(boost::program_options::parse_command_line(argc,argv,desc),vm); boost::program_options::notify(vm); if(vm.count("create") >= 1) { std::string val1 = createOptions[0]; std::string val2 = createOptions[1]; ... // call some function passing val1,val2. } }
当我这样做,这工作正常
cmdparsing.exe --create arg1 arg2
但是,当我这样做不起作用
cmdparsing.exe --create "this is arg1" "this is arg2"
从Windows命令行。 对于第二个选项,它将在createOptions向量中转换为["this" "is" "arg1" "this" "is" "arg2"] 。 因此, val1得到"this" , val2得到"is"而不是"this is arg1"和"this is arg2" 。
通过批处理脚本执行参数化的.exe文件(Windows命令行)
在Windows命令行上,如何将来自cat的输出提供给我的java main方法?
在VIM中search和replace会导致结尾字符
Windows上的check_call和命令行参数
可执行的Python脚本不能在Windows中使用sys.argv
我怎样才能使用boost :: program_option来做这个工作?
从Windows命令行调用脚本
如何通过Windows上的system()函数将换行符作为parameter passing?
回声所有palindromes,在C
如何在batch file中识别用户input帮助(/?)
我使用原生的Windows函数修复了它,它处理命令行参数的方式不同。 有关详细信息,请参阅CommandLinetoArgvW 。 在将它传递给processCommands()之前,我使用上面提到的方法修改了我的argv []和argc。 谢谢Bart van Ingen Schenau的评论。
#ifdef _WIN32 argv = CommandLinetoArgvW(GetCommandLineW(),&argc); if (NULL == argv) { std::wcout << L"CommandLinetoArgvw Failed" << std::endl; return -1; } #endif
我会写我自己的命令行解析器,通过argv并手动分析选项。 这样你就可以做任何你想做的事,无论是分裂还是分裂--在这样的情况下,
cmdparsing.exe --create1 arg1 --create2 arg2
要么
cmdparsing.exe --create "First Arg" "Second Arg"
通过手动操作,您可以节省时间,正确地反映您真正需要的内容,而不是与没有做到您想要的操作的图书馆打交道。
(你需要否则它会被打破,因为你已经看到了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。