ดูเอกสารประกอบของfor
(เรียกใช้for /?
เพื่อดู) ฉันไม่คิดว่าfor /f
จะอ่านจากไปป์ แหล่งข้อมูลที่ถูกต้องเท่านั้นคือชุดไฟล์ "string" และ 'command'
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]
คุณสามารถใส่คำสั่งในfor
ลักษณะนี้:
for /f "tokens=15" %f in ('ipconfig ^| findstr "Address"') do @echo %f
192.168.x.x
192.168.y.y
(ขอบคุณ neurolysis สำหรับการชี้ให้เห็นว่ามันจะต้องเป็น^|
และไม่ใช่แค่|
)
หรือคุณอาจลองใส่ipconfig | findstr "Address"
ชุดสคริปต์แยกต่างหากและโทรหา:
for /f "tokens=14" %f in ('ipaddresses') do @echo %f
(สมมติว่าคุณเรียกว่าสคริปต์ipaddresses
)
หรือคุณสามารถใช้for
เพื่อทำงานของfindstr
เช่นกัน:
for /f "tokens=2,14" %i in ('ipconfig') do @if %i==Address. @echo %j
192.168.x.x
192.168.y.y
มันไม่เหมือนกันเพราะมันจะไม่ตรงกับที่อยู่ IPv6 แต่บางสิ่งในสายเหล่านั้นสามารถใช้งานได้
นอกจากนี้ทราบว่าผมเปลี่ยนไปtokens=15
tokens=14
ฉันคิดว่าฟิลด์สุดท้ายของบรรทัดคือโทเค็น 14 ใช้ได้สำหรับฉันแล้ว