我可以在命令行上运行此循环:
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
答案 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-address
,MAC-address
,Computer-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