在C++中使用"set /p"
Using "set /p" in C++
我正在尝试设置一个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()启动的程序继承。
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 使用运算符调用 void 函数时出错<set>
- 修改"std::set"中用户定义类型的值
- 生成提升::hana::set 的常量表达式问题
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 重构使用动态强制转换的 std::set 的比较运算符
- set::find 查找不存在的元素
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法
- 错误 C2676:std::set::const_iterator 没有运算符 + 函数?
- std::set 是否将对象连续存储在内存中?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- google test PrintTo for std::set<std::string>