จะแสดงบรรทัด N บรรทัดแรกของเอาต์พุตคำสั่งใน Windows ได้อย่างไร (เทียบเท่าของคำสั่ง Unix“ หัว”)


17

ฉันต้องการheadคำสั่งUnix ที่เทียบเท่ากัน(แสดง N บรรทัดแรกของเอาต์พุต) นี่คือสิ่งที่ฉันใช้อยู่ในปัจจุบัน:

tasklist | find /N " " | findstr /r \[[0-9]\]

โค้ดด้านบนแสดง 10 บรรทัดแรกของtasklistเอาต์พุต find /N " "เตรียมหมายเลขบรรทัดเพื่อเริ่มต้นของแต่ละบรรทัดในขณะที่findstr /r \[[0-9]\]แยก 10 บรรทัดแรกโดยใช้ regex

รหัสข้างต้นทำงาน แต่ฉันจำเป็นต้องระบุช่วงใด เนื่องจากความจริงที่ว่านิพจน์ทั่วไปไม่ได้ดำเนินการตามมาตรฐานใน Windows ฉันจึงไม่สามารถทำงานอื่นได้อีก

ฉันจะแยกบรรทัดออกจากเอาต์พุต cmd ได้อย่างไร? มันเป็นสิ่งสำคัญที่จะทำเช่นนี้กับหนึ่งซับ ไม่มีสคริปต์!


.....................
giecsar

คำตอบ:


36

Powershell

PS C:\> netstat | Select -First 20

แก้ไข: ฉันรู้สึกว่าคุณจะยืนยันว่าคุณสามารถใช้ cmd.exe ประมาณปี 1989 เท่านั้น แต่นั่นไม่เป็นความจริง Powershell ถูกอบลงในทุก OS เวอร์ชัน Vista + และสามารถติดตั้งได้ใน XP / 2003 มันเป็นอนาคตของ Windows

แก้ไข: เอาล่ะมีวิธีของคุณ

C:\> netstat -an > temp.txt && for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" temp.txt ^| findstr /r "^%l:"') do @echo %b

จะแสดง 10 บรรทัดแรกของเอาต์พุตของ netstat


5
ฉันไม่สงสัยเลยว่า PowerShell เป็นอนาคต แต่ฉันต้องการบางสิ่งที่ใช้งานได้ในตอนนี้ ในความเป็นจริงขององค์กรบ่อยครั้งที่ลูกค้าของฝ่ายสนับสนุนด้านเทคนิคของเรามีเซิร์ฟเวอร์ windows หลายร้อยเครื่องไม่มี Vista, 7 หรือ 8 ฉันไม่สามารถเสียเวลาติดตั้ง PowerShell ทุกครั้งที่ฉันต้องรันคำสั่ง แม้จะได้รับอนุญาต
giecsar

Cmd.exe เป็น ...
Ryan Ries

สิ่งที่พวกเขาต้องการก็คือเซิร์ฟเวอร์ w2k8r2 หนึ่งตัวที่พวกเขาสามารถลงชื่อเข้าใช้เพื่อเรียกใช้คำสั่ง powershell ได้หรือไม่?
tony roth

ฉันไม่รู้ว่ามีเซิร์ฟเวอร์ 2K8 หรือไม่ แต่คำตอบของ Ryan Ries เป็นสิ่งที่ฉันต้องการ ขอบคุณมาก Ryan!
giecsar

1
โปรดอย่าลืม ... ทำเครื่องหมายคำตอบว่า ... ยอมรับแล้ว ... : `( ขดตัวในท่าของทารกในครรภ์ที่มุมห้องและสะอื้นเพื่อตนเอง
Ryan Ries

8

หากคุณเป็นบุคคลประเภท Unix อาจติดตั้งCygWinให้สภาพแวดล้อมที่คุ้นเคยมากขึ้น


2
ไม่ฉันคิดว่าฉันทำให้ชัดเจน แต่ฉันไม่สามารถติดตั้งอะไรได้ มันจะต้องทำงานกับหน่วยประมวลผลคำสั่งของ Windows (cmd.exe) ไม่มี PowerShell ไม่มี CygWin ไม่มีสคริปต์
giecsar

3

มีวิธีแก้ปัญหาที่ง่ายกว่าการใช้forลูป ""

ลองเอาท์พุทจากdir/o-d( dirผกผันเรียงตามวันที่) เป็นตัวอย่าง

เช่นถ้าคุณต้องการส่งออกบรรทัดที่ 1 ถึง 16 ให้ใช้:

dir/o-d|findstr/n ^^|findstr "^[1-9]: ^1[0-6]:"

เช่นถ้าคุณต้องการส่งออกบรรทัดที่ 16 ถึง 45 ให้ใช้:

dir/o-d|findstr/n ^^|findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"

ตัวอย่างผลลัพธ์:

16:08/08/2016  08:43 AM    <DIR>          nacl_sdk
17:11/05/2016  10:48 PM    <DIR>          3b 2
18:28/04/2016  02:47 PM    <DIR>          sample
19:22/04/2016  10:07 PM    <DIR>          mysql test
20:16/04/2016  01:22 AM    <DIR>          3b
21:16/04/2016  01:10 AM             2,706 errorlog
22:16/04/2016  12:53 AM                 0 accesslog
...

ชำรุด:

  1. dir/o-dประการแรกการถ่ายโอนข้อมูลการส่งออกทั้งใช้

  2. จากนั้นเติมแต่ละบรรทัดด้วยการ$Num:ใช้ ""findstr/n ^^

    • ^หมายถึงการจับคู่เริ่มต้นของบรรทัดและ^^เป็นรุ่นที่จำเป็นต้องใช้เพราะเราอยู่ในหน่วย cmd

    • หมายเหตุ: คุณต้องใช้findstrสำหรับสิ่งนี้เพราะfind/n" "จะไม่จับคู่บรรทัดที่ไม่มีช่องว่าง

  3. findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"สุดท้ายตัดการส่งออกโดยใช้

    • ^1[6-9]: เป็น regex สำหรับ 16 ถึง 19

    • ^[2-3][0-9]: เป็น regex สำหรับ 20 - 39

    • ^4[0-5]: เป็น regex สำหรับ 40 ถึง 45

    • findstr "a b c"วิธีการหาสตริงซึ่งตรงกับการแสดงออกอย่างใดอย่างหนึ่งa, หรือbc

โปรดดู/programming//q/8844868/632951


นั่นเป็นคำตอบที่ดี แต่ตอนนี้คุณมีหมายเลขนำหน้าอยู่ที่นั่นหนึ่งสามารถกำจัดพวกเขาในการโทร findstr ล่าสุด?
fschmitt

@fschmitt findstrไม่สามารถลบสิ่งต่าง ๆ ได้ ฉันคิดว่าคุณอาจถูกบังคับให้ใช้การวนซ้ำในกรณีนั้น
Pacerier

0

นี่คือคำสั่งบรรทัดเดียวฉันหวังว่าจะได้ผลกับคุณเช่นกัน

@echo off&cls&for /f "tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=1 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=2 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=3 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=4 tokens=*" %a in (Graph.bat) do echo %a&pause>nul

:: Run this from CMD.exe and make sure that your file is in your current working directory.

::Replace Graph.bat with your file.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.