首页 > 解决方案 > 无法将回声通过管道传输到输入

问题描述

我刚开始批量编程。我尝试在 .bat 文件中执行以下代码,也直接在 CMD 中执行。在任何一种情况下,我都会收到一个空格。

ECHO My name is agent Smith |  SET /P Name="What is your name?"
ECHO Result is %Name%

A 在一本关于批处理编程的书中找到了此代码,但不起作用。

在某处我读到 echo 在不同的上下文中,并且 SET /P 只接受用户输入的内容。

标签: batch-file

解决方案


我会看一下这个堆栈溢出,以便更深入地讨论导致问题的原因。简而言之,管道操作员在单独的线程中评估左侧和右侧。这意味着在其线程的上下文中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

推荐阅读