“这个过程试图写入一个不存在的管道。”蝙蝠文件

时间:2018-01-18 09:47:48

标签: windows batch-file pipe echo

我可以在命令行上运行此循环:

for /f "tokens=2" %i in ('arp -a ^| Find/i "dynamic"') do echo %i

但如果我运行相同的bat文件,我会得到:

^C^C^C^Cthe process tried to write to a nonexistent pipe^C^C^C^C^C^C^C^C^

C:\ 1 \ test.bat的:

for /f "tokens=2" %%i in ('arp -a ^ |Find/i "dynamic"') do echo %%i

你的arp -a命令返回:

C:\Users\test>arp -a
Interface: xxx.xx.xxx.40 --- 0xbe
Internet Address      Physical Address
 xxx.xx.xxx.18           xx-xx-xx-xx-xx-xx     dynamic
 xxx.xx.xxx.26           xx-xx-xx-xx-xx-xx     dynamic
 xxx.xx.xxx.34           xx-xx-xx-xx-xx-xx     dynamic
 xxx.xx.xxx.114          xx-xx-xx-xx-xx-xx     dynamic

感谢任何帮助// Simon

3 个答案:

答案 0 :(得分:0)

您已在管道 | 之前引入了额外的空白字符。因此,插入符号 ^ 具有逃避空白的效果,并且管道不会按原样进行转义。

@For /F "Tokens=2" %%i In ('arp -a ^| Find /I "dynamic"') Do @(Echo %%i)>>"%~dp0output.txt"

答案 1 :(得分:0)

添加计算机名称(当我解释您的comment正确时):

@echo off
for /f "tokens=1,2" %%a in ('arp -a^|find "dynam"') do (
  for /f "tokens=5" %%c in ('ping -a -n 1 %%a^|find "["') do (
    >>"%~dp0output.txt" echo %%a    %%b %%c
  )
)

显示IP-addressMAC-addressComputer-name。根据您的需要调整echo行 您可能需要为您的语言调整令牌(tokens=5)(内部for) 您可能希望将delims=.添加到内部for以仅获取计算机名称。

根据你的意见:

@echo off
setlocal EnableDelayedExpansion
set number=0
for /f "tokens=1,2" %%a in ('arp -a^|find "dynam"') do (
  set /a number +=1
  for /f "tokens=5" %%c in ('ping -a -n 1 %%a^|find "["') do (
    >>"%~dp0output.txt" echo %%b Computer!number!
  )
)

输出:

00-24-fe-xx-xx-xx  Computer1
f4-f5-e8-xx-xx-xx  Computer2
48-d6-d5-xx-xx-xx  Computer3
d4-85-64-xx-xx-xx  Computer4
80-86-f2-xx-xx-xx  Computer5
24-77-03-xx-xx-xx  Computer6
fc-db-b3-xx-xx-xx  Computer7
80-1f-02-xx-xx-xx  Computer8

答案 2 :(得分:0)

当我真的打算随后grep一个文件时,不小心将批处理脚本传送到MSYS grep时,我反复收到此错误:

> call foo.cmd | grep pattern path\to\file
The process tried to write to a nonexistent pipe.
The process tried to write to a nonexistent pipe.
The process tried to write to a nonexistent pipe.
The process tried to write to a nonexistent pipe.
...

我无法准确确定foo.cmd会导致此错误的原因(我的foo.cmd相当长而且很复杂),但是我想我还是要在这里添加。希望它可以帮助某人(甚至几个月内对我自己)。我的意思是:

> call foo.cmd && grep pattern path\to\file