Jeśli chcesz to zrobić cmd
, to prosty sposób na zrobienie tego:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%
To zakłada linię poleceń. Zrobiłbyś to w pliku wsadowym
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
co robi coś ładniejszego. Możesz upuścić >nul
wsadowo, ponieważ set /a
nie wyświetli wyniku, jeśli zostanie uruchomiony z pliku wsadowego - robi to bezpośrednio z wiersza poleceń. Ponadto %
znak w for
pętli musi zostać podwojony.
Widziałem całkiem sporo przypadków, w których ludzie próbują sprytnych sztuczek find /c
. Bądź z nimi bardzo ostrożny, ponieważ różne rzeczy mogą to zepsuć.
Typowe błędy:
Za pomocą find /c /v
i spróbuj znaleźć coś, co nigdy nie jest zawarte w nazwie pliku, np ::
. Przyzwyczajenie. Praca. Niezawodnie. Gdy okno konsoli jest ustawione na czcionki rastrowe, możesz uzyskać tę kombinację znaków. Mogę zawierać znaków w nazwie pliku, takie jak :
, ?
itp w ich pełnej szerokości wariantów na przykład, który będzie następnie zamieniony na ich normalne odpowiedniki ASCII, który złamie ten. Jeśli potrzebujesz dokładnej liczby, nie próbuj tego.
Używając find /c
i spróbuj znaleźć coś, co zawsze jest zawarte w nazwie pliku. Oczywiście kropka ( .
) jest złym wyborem. Sugeruje inna odpowiedź
dir /a-d | find /c ":"
który zakłada kilka rzeczy na temat ustawień użytkownika, z których nie wszystkie są gwarantowane (pozostawiłem komentarz szczegółowo opisujący problemy) i zwraca zbyt wiele wyników.
Ogólnie rzecz biorąc, chcesz użyć, find
na dir /b
którym odcina się wszystkie elementy inne niż nazwa pliku i w ten sposób pozwala uniknąć błędów słupka ogrodzeniowego.
Zatem eleganckim wariantem byłoby:
dir /b /a-d | find /c /v ""
który najpierw wyświetli wszystkie nazwy plików, po jednym wierszu. A następnie policz wszystkie wiersze tego wyjścia, które nie są puste. Ponieważ nazwa pliku nie może być pusta (chyba że czegoś mi brakuje, ale Unicode nie uruchomi tego zgodnie z moimi testami).