batch-file - 无法将回声通过管道传输到输入
问题描述
我刚开始批量编程。我尝试在 .bat 文件中执行以下代码,也直接在 CMD 中执行。在任何一种情况下,我都会收到一个空格。
ECHO My name is agent Smith | SET /P Name="What is your name?"
ECHO Result is %Name%
A 在一本关于批处理编程的书中找到了此代码,但不起作用。
在某处我读到 echo 在不同的上下文中,并且 SET /P 只接受用户输入的内容。
解决方案
我会看一下这个堆栈溢出,以便更深入地讨论导致问题的原因。简而言之,管道操作员在单独的线程中评估左侧和右侧。这意味着在其线程的上下文中SET /P Name=
设置环境变量Name
,而不是在调用线程的上下文中。在以下示例中可以更清楚地看到这一点:
set name=invokingContext
echo threadContext | (set /p name= & set name)
set name
输出:
name=threadContext
name=invokingContext
假设您具有写入权限,绕过此限制的一种简单方法是使用临时文件和重定向:
echo My name is agent Smith > tmp.txt
set /p Name=What is your name < tmp.txt
echo %Name%
哪个输出:
What is your name
My name is agent Smith
推荐阅读
- hbase - zookeeper 启动变慢,Hbase 启动失败
- ios - 如果设置了 contentInset,则在长按选择文本时 WKWebView 出现奇怪的滚动行为
- javascript - RXjs,链接长轮询请求
- php - laravel whereMonth 在集合中不起作用
- angularjs - 在没有 SSRS 身份验证标头的 React.js 或 Angular js 中实现 SSRS 报告
- performance - 如何实现部分资源休息 api?
- html - 展示异常行为的页脚
- java - 无法将数组作为正文参数传递:无效数组
- python - Python如何在两个列表之间找到一个单词但不完全相同?
- javascript - 基于一个键合并两个对象数组而不展平它?