命令行可运行的ARP循环在BAT文件中报错:尝试写入不存在的管道
解决BAT文件中提取ARP动态条目的管道错误问题
我看你遇到的问题很明确:命令行直接运行循环能正常输出动态ARP条目,但写到BAT文件里就报管道错误。咱们来一步步解决:
首先,你命令行里的正确命令是:
for /f "tokens=2" %i in ('arp -a ^| Find/i "dynamic"') do echo %i
而你写进BAT的代码里,转义符^和管道符|之间多了一个空格,这就是问题的根源!你的错误代码是:
for /f "tokens=2" %%i in ('arp -a ^ |Find/i "dynamic"') do echo %%i
注意看^ |这里的空格,它会让转义符失效,导致管道符没有被正确传递给for /f的子进程,进而触发the process tried to write to a nonexistent pipe错误。
正确的BAT代码
把那个多余的空格删掉就好了,代码如下:
for /f "tokens=2" %%i in ('arp -a ^| Find/i "dynamic"') do echo %%i
简单解释下原因
在for /f的括号里,我们需要用^|来转义管道符,让它不被当前的CMD进程解析,而是传递给子进程去执行arp -a | find /i "dynamic"这个组合命令。如果^和|之间加了空格,^就会转义那个空格,而|会被当成当前命令的管道,这就导致子进程还没准备好接收数据,管道就出问题了,自然就报错了。
内容的提问来源于stack exchange,提问作者user8785018
相关产品推荐
相关产品推荐

