Если вы хотите сделать это 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 не запутает это согласно моим тестам).
dir /b /a-d | find /c /v ""
%count%
расширяется во время разбора.Спросите, и вы получите: http://technet.microsoft.com/en-us/library/ee692796.aspx
К вашему сведению ... Я гуглил "файлы подсчета PowerShell".
источник
(Get-ChildItem -recurse -filter "*.ps1").Count
Предупреждение об использовании PowerShell для таких простых файловых операций, как этот - он невероятно медленный по сравнению с cmd.exe, особенно по сетевым подключениям или когда в каталоге находятся тысячи файлов. Смотрите этот пост на форуме для получения дополнительной информации.
источник
dir
дает вам общее количество файлов в нижней части.источник
dir > file
.. ааа, я скучаю по POSIXdir > file
не должен работать в Windows? Знаете, перенаправление вывода не совсем волшебно.dir | grep (something)
чтобы избежать медленной записи на экране, которая замедляет работу (и сводит ее к минимуму).Самый быстрый способ, который я нашел, - запустить следующее в консоли PS.
где $ path - это локальный путь или общий ресурс UNC.
источник
просто посчитайте строки из вывода dir / B (включая каталоги):
dir /B | find /c /v "~~~"
просто для подсчета файлов (без каталогов):
dir /A-D /B | find /c /v "~~~"
источник
Нашел это в сети:
Я проверил, и это похоже на работу.
источник
dir
команда включает в себя строку с двоеточием, которая не является файлом. (2) Это зависит от формата времени для включения двоеточия, что не обязательно должно быть так. (3) Он основан на числовом формате, не включая двоеточие, что также не обязательно должно быть таковым. Кроме того, просмотр файла здесь не нужен и не будет работать, если у вас нет прав на запись - плохая идея.Просто предостережение для тех, кто может использовать приведенный выше ответ PowerShell от Trevoke (командная строка Windows: как получить счетчик всех файлов в текущем каталоге? ): По своему замыслу отображение свойства Count коллекции, возвращаемой Get-ChildItem, может дать неверные результаты если значение равно 1 или 0. Это связано с тем, что свойство Count доступно только для массивов. Если Get-ChildItem возвращает менее 2 элементов, результат является скалярным, а .Count ничего не возвращает. Чтобы обойти это, явно приведите его к массиву, например, @ (Get-ChildItem C: \ Scripts) .Count.
Для получения дополнительной информации см. Http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file или http://www.vistax64.com/powershell/266379. -get-childitem-count-not-working-one-file.html .
источник
dir
возвращает количество файлов и каталогов внизуисточник
Буду конечно работать
Не устанавливая что-либо на сервер, но имея PowerShell на своей рабочей станции, вы можете сделать:
эта команда выдаст вам все файлы (включая системные и скрытые), и, как уже упоминалось ранее, если на машине есть powershell, вы можете просто
Обратите внимание, что если вы не включите . Вы получите количество всех файлов и всех каталогов. Вы не будете включать скрытые и системные файлы, которые нужно добавить -force, чтобы подсчитать их все
источник
Если бы мне это понадобилось только один раз, я бы просто использовал dir, в противном случае я бы подумал о том, чтобы развернуть свое собственное, вероятно, как приложение на C #, потому что это то, с чем я был бы наиболее знаком (хотя VBScript или PowerShell также были бы жизнеспособны).
(Кстати - это не DOS, если вы используете cmd.exe)
источник
Я считаю, что вы можете использовать attrib, чтобы получить количество файлов:
Это создаст файл с именем filecount.txt в текущем каталоге с количеством файлов и папок в текущем каталоге (включая вновь созданный файл). Вы можете изменить
в
для того, чтобы получить количество файлов определенного каталога. Удалите опцию «/ D», если вы не хотите считать папки. Параметр "/ s" обрабатывает файлы во всех каталогах по указанному пути. Поэтому удалите его, если вам нужны только файлы по указанному пути и вы не хотите включать файлы в подпапки.
Например, если вы хотите узнать, сколько файлов находится на вашем диске C: \, а не в какой-либо подпапке, используйте команду:
источник
Я делаю нечто подобное, и это работает с любым количеством файлов мгновенно.
источник
find
не очень хорошая идея. Смотрите принятый ответ для деталей.