หากคุณต้องการที่จะทำกับมันcmd
แล้วต่อไปนี้เป็นวิธีที่ไม่สำคัญที่จะทำมัน:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%
นั่นคือสมมติว่าบรรทัดคำสั่ง ในแบทช์ไฟล์ที่คุณจะทำ
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
ซึ่งทำสิ่งต่าง ๆ ดีกว่าเล็กน้อย คุณสามารถวาง>nul
ในแบตช์เนื่องจากset /a
จะไม่แสดงผลลัพธ์หากเรียกใช้จากไฟล์แบตช์ซึ่งจะทำโดยตรงจากบรรทัดคำสั่ง ยิ่งไปกว่านั้นการ%
เซ็นชื่อในfor
วงจะต้องเป็นสองเท่า
find /c
ผมเคยเห็นค่อนข้างไม่กี่กรณีที่คนพยายามเทคนิคที่ดีด้วย จะมากระมัดระวังกับเหล่านั้นเป็นสิ่งต่างๆสามารถทำลายนี้
ข้อผิดพลาดทั่วไป:
การใช้และลองหาบางสิ่งบางอย่างที่ไม่เคยรวมอยู่ในชื่อไฟล์เช่นfind /c /v
::
เคยชิน. งาน. อย่างน่าเชื่อถือ เมื่อหน้าต่างคอนโซลถูกตั้งค่าเป็นฟอนต์แรสเตอร์คุณจะสามารถใช้ชุดอักขระเหล่านั้นได้ ที่ฉันสามารถรวมตัวอักษรในชื่อไฟล์เช่น:
, ?
ฯลฯ ในเต็มความกว้างของพวกเขาเช่นสายพันธุ์ซึ่งจะได้รับการแปลงแล้วกับคู่ ASCII ปกติของพวกเขาซึ่งจะทำลายนี้ หากคุณต้องการการนับที่แม่นยำอย่าพยายามทำเช่นนี้
การใช้find /c
และลองหาบางสิ่งบางอย่างที่มักจะรวมอยู่ในชื่อไฟล์ เห็นได้ชัดว่าจุด ( .
) เป็นตัวเลือกที่แย่ คำตอบอีกข้อเสนอแนะ
dir /a-d | find /c ":"
ซึ่งถือว่าหลายสิ่งเกี่ยวกับสถานที่ของผู้ใช้ไม่ใช่ทั้งหมดที่รับประกันว่าเป็นจริง (ฉันได้แสดงความคิดเห็นโดยละเอียดถึงปัญหาที่เกิดขึ้น) และส่งคืนผลลัพธ์มากเกินไป
โดยทั่วไปแล้วคุณต้องการที่จะใช้find
ในdir /b
ที่ตัดออกไปทุกสิ่งที่ไม่ใช่ชื่อไฟล์และหลีกเลี่ยงข้อผิดพลาด fencepost วิธีการที่
ดังนั้นตัวแปรที่สง่างามจะเป็น:
dir /b /a-d | find /c /v ""
ซึ่งก่อนจะออกชื่อไฟล์ทั้งหมดหนึ่งบรรทัดในแต่ละบรรทัด จากนั้นนับบรรทัดทั้งหมดของเอาต์พุตที่ไม่ว่างเปล่า เนื่องจากชื่อไฟล์ต้องไม่ว่างเปล่า (เว้นแต่ฉันจะทำบางอย่างขาดหายไป แต่ Unicode จะไม่เดินทางตามการทดสอบของฉัน)