Nhìn vào tài liệu cho for
(chạy for /?
để xem nó), tôi không nghĩ for /f
sẽ đọc từ một đường ống. Các nguồn hợp lệ duy nhất là tập tin tập tin, "chuỗi" và 'lệnh'.
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
Bạn có thể đặt lệnh bên trong for
như thế này:
for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
(nhờ phân tích thần kinh để chỉ ra nó phải ^|
và không chỉ |
)
Hoặc bạn có thể thử đặt ipconfig | findstr "Address"
một tập lệnh bó riêng và gọi:
for /f "tokens=14" %f in ('ipaddresses') do @echo %f
(giả sử bạn đã gọi kịch bản ipaddresses
).
Hoặc bạn có thể sử dụng for
để làm công việc findstr
quá, như thế này:
for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j
192.168.x.x
192.168.y.y
nó không hoàn toàn giống nhau bởi vì nó sẽ không khớp với các địa chỉ IPv6, nhưng một cái gì đó dọc theo các dòng đó có thể hoạt động.
Cũng lưu ý rằng tôi đã thay đổi tokens=15
thành tokens=14
. Tôi nghĩ rằng trường cuối cùng trên dòng là mã thông báo 14. Dù sao cũng hoạt động với tôi.