Если вы хотите сделать это 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 не запутает это согласно моим тестам).