Nếu bạn muốn làm điều đó với cmd
, thì sau đây là cách tầm thường để làm điều đó:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%
Đó là giả sử dòng lệnh. Trong một tập tin hàng loạt, bạn sẽ làm
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
mà làm mọi thứ tốt hơn một chút. Bạn có thể thả >nul
một lô, vì set /a
sẽ không hiển thị kết quả nếu chạy từ tệp bó mà nó thực hiện trực tiếp từ dòng lệnh. Hơn nữa, %
dấu hiệu trong for
vòng lặp phải được nhân đôi.
Tôi đã thấy khá nhiều trường hợp mọi người thử các thủ thuật tiện lợi find /c
. Hãy rất cẩn thận với những thứ đó, vì những thứ khác nhau có thể phá vỡ điều này.
Lỗi thường gặp:
Sử dụng find /c /v
và thử tìm thứ gì đó không bao giờ có trong tên tệp, chẳng hạn như ::
. Sẽ không. Công việc. Đáng tin cậy Khi cửa sổ giao diện điều khiển được đặt thành phông chữ raster thì bạn có thể nhận được các kết hợp ký tự đó. Tôi có thể bao gồm các nhân vật trong một tên tập tin như :
, ?
vv trong các biến thể đầy đủ chiều rộng của họ ví dụ, sau đó sẽ được chuyển đổi với các đối tác ASCII bình thường của họ mà sẽ phá vỡ này. Nếu bạn cần một số đếm chính xác, thì đừng thử điều này.
Sử dụng find /c
và thử tìm thứ gì đó luôn có trong tên tệp. Rõ ràng dấu chấm ( .
) là một lựa chọn kém. Một câu trả lời khác cho thấy
dir /a-d | find /c ":"
trong đó giả định một số điều về ngôn ngữ của người dùng, không phải tất cả những điều được đảm bảo là đúng (tôi đã để lại một bình luận nêu chi tiết các vấn đề ở đó) và trả về một kết quả quá nhiều.
Nói chung, bạn muốn sử dụng find
trên dir /b
đó cắt đi tất cả những thứ không tên tập tin và tránh fencepost lỗi như vậy.
Vì vậy, biến thể thanh lịch sẽ là:
dir /b /a-d | find /c /v ""
đầu tiên sẽ xuất ra tất cả các tên tệp, mỗi dòng một. Và sau đó đếm tất cả các dòng của đầu ra không trống. Vì tên tệp không thể để trống (trừ khi tôi thiếu một cái gì đó, nhưng Unicode sẽ không vượt qua điều này theo các thử nghiệm của tôi).