在C++中使用"set /p"

Using "set /p" in C++

本文关键字:set C++      更新时间:2023-10-16

我正在尝试设置一个windows命令行环境变量(以帮助自动启动需要用户输入的windows进程),然后通过system()将其回显。

#include <iostream>
using namespace std;
int main() {
    system("set /p foo= foo=");
    system("echo %foo%");
    system("pause");
    return 0;
}

运行后,我收到以下反馈:

foo=条形

%foo%

按任意键继续。

为了让程序工作,我需要接收"bar",%foo%的内容,但这并没有发生。

奇怪的是,如果直接输入到命令行中,代码就会工作。

C:UsersJohnDoe>set /p foo= foo=
foo=bar
C:UsersJohnDoe>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按任意键继续。

然后在第二个窗口:

条形

system运行命令解释器的新实例。在该过程中设置环境变量对程序自己的过程没有影响。不幸的是,C++标准库对环境变量的支持非常有限:只有一个函数getenv

出于您的目的,在Windows中,您可能会发出类似system( "set foo=bar & run_that_program" );的调用。

您可以使用SetEnvironmentVariable函数直接在C程序中设置环境变量。(当然,您可以使用通常的C I/O功能提示用户设置值。)

这样的变量应该由用system()启动的程序继承。