我试图设置一个Windows命令行环境变量(以帮助自动启动需要用户输入的Windows进程),然后通过system()回显它。
#include <iostream>
using namespace std;
int main() {
system("set /p foo= foo=");
system("echo %foo%");
system("pause");
return 0;
}
运行后,我会收到此反馈:
富=酒吧
%FOO%
按任意键继续。 。
要使该计划有效,我需要收到&#34; bar&#34;,%foo%的内容,但这种情况不会发生。
奇怪的是,如果直接输入命令行,代码就可以工作。
C:\Users\JohnDoe>set /p foo= foo=
foo=bar
C:\Users\JohnDoe>echo %foo%
bar
为什么C ++代码不起作用?
编辑:
使用建议的更改,如下所示:
#include <iostream>
using namespace std;
int main() {
system("set /p foo=\" Enter foo= \" & echo %foo%");
system("pause");
return 0;
}
返回此反馈:
输入foo = bar
%FOO%
按任意键继续。 。
使用以下代码有效,但会打开第二个窗口:
#include <iostream>
using namespace std;
int main() {
system("set /p foo=\" Enter foo= \" & start echo %foo%");
system("pause");
return 0;
}
输入foo = bar 按任意键继续 。 。
然后在第二个窗口中:
巴
答案 0 :(得分:2)
system
运行命令解释程序的新实例。在该过程中设置环境变量对程序自身的过程没有影响。不幸的是,C ++标准库对环境变量的支持非常有限:只是一个函数getenv
。
出于您的目的,您可以在Windows中发出system( "set foo=bar & run_that_program" );
之类的调用。
答案 1 :(得分:0)
您可以使用SetEnvironmentVariable功能直接在C程序中设置环境变量。 (当然,您可以使用常用的C I / O函数提示用户设置值。)
这样的变量应该由你用system()开始的程序继承。