批处理脚本:进程试图写入一个不存在的管道
batch script: The process tried to write to a nonexistent pipe
@echo off
(for /f "skip=1 tokens=3,5,11" %%a in (Data.txt) do (if /i "%%c"=="%1" (if %%b==%2 echo %%a))
echo EXIT
)|Sum.exe
我正在尝试编写一个简单的批处理脚本,它将获取包含数据列 (Data.txt) 的 .txt 文件,使用 'if' 查找一些值并将所有找到的值重定向到标准输入输入“Sum.exe”。
“EXIT”也被重定向,因为它意味着没有更多的输入要给出。
当我 运行 上面的代码首先在控制台打印发现值,然后多次打印“进程试图写入不存在的管道”消息错误。因此 echo EXIT
一定是在搞乱 |Sum.exe
。如何正确地将 for 和 echo Exit 重定向到 Sum?
编辑:
好的,这是 Sum 程序的输入部分(用 c++ 编写)
std::string a;
while (a != "EXIT")
{
std::cin >> a;
if (isNumber(a))
add(sum, std::stoi(a));
}
我添加了 cout 以查看是否正在处理数据,似乎批处理脚本中的命令也被视为输入。
我的第一个建议是过程调用:call :PROCEDURE
。但是调用不适用于管道重定向。
例如call :PROCEDURE | SORT
return错误:Invalid attempt to call batch label outside of batch script.
所以我建议使用输入参数作为切换标志来调用自批处理。例如,它将是第三个参数:%3
。当第三个参数等于 x
.
时,Batch 调用自身
所以我做了这个代码
@echo off
if "%3"=="x" (%~nx0 %1 %2|sort )& GOTO :EOF
for /f "skip=1 tokens=3,5,11" %%a in (Data.txt) do (
if /i "%%c"=="%1" (if %%b==%2 echo %%a)
echo EXIT
)
我在示例中使用了 sort.exe
实用程序。将其更改为您的 sum.exe
要调用 batch-file,请使用语法:my_batch.cmd [value11] [value5] x
P.S。我认为您不需要在输出中使用单词 EXIT
,但我将其留在了示例代码中。
@echo off
(for /f "skip=1 tokens=3,5,11" %%a in (Data.txt) do (if /i "%%c"=="%1" (if %%b==%2 echo %%a))
echo EXIT
)|Sum.exe
我正在尝试编写一个简单的批处理脚本,它将获取包含数据列 (Data.txt) 的 .txt 文件,使用 'if' 查找一些值并将所有找到的值重定向到标准输入输入“Sum.exe”。
“EXIT”也被重定向,因为它意味着没有更多的输入要给出。
当我 运行 上面的代码首先在控制台打印发现值,然后多次打印“进程试图写入不存在的管道”消息错误。因此 echo EXIT
一定是在搞乱 |Sum.exe
。如何正确地将 for 和 echo Exit 重定向到 Sum?
编辑:
好的,这是 Sum 程序的输入部分(用 c++ 编写)
std::string a;
while (a != "EXIT")
{
std::cin >> a;
if (isNumber(a))
add(sum, std::stoi(a));
}
我添加了 cout 以查看是否正在处理数据,似乎批处理脚本中的命令也被视为输入。
我的第一个建议是过程调用:call :PROCEDURE
。但是调用不适用于管道重定向。
例如call :PROCEDURE | SORT
return错误:Invalid attempt to call batch label outside of batch script.
所以我建议使用输入参数作为切换标志来调用自批处理。例如,它将是第三个参数:%3
。当第三个参数等于 x
.
所以我做了这个代码
@echo off
if "%3"=="x" (%~nx0 %1 %2|sort )& GOTO :EOF
for /f "skip=1 tokens=3,5,11" %%a in (Data.txt) do (
if /i "%%c"=="%1" (if %%b==%2 echo %%a)
echo EXIT
)
我在示例中使用了 sort.exe
实用程序。将其更改为您的 sum.exe
要调用 batch-file,请使用语法:my_batch.cmd [value11] [value5] x
P.S。我认为您不需要在输出中使用单词 EXIT
,但我将其留在了示例代码中。