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