Назад | Перейти на главную страницу

Командная строка Windows: как узнать количество всех файлов в текущем каталоге?

Какую команду вы бы использовали в cmd.exe найти количество файлов в текущем каталоге?

Здесь есть опция PowerShell?

Обновить: Я надеялся избежать dir, насколько мне известно, в текущем каталоге более 10 000 файлов. Хотел избежать вывода перечисления в окно cmd. Спасибо!

Если вы хотите сделать это с 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. Быть очень осторожно с ними, так как разные вещи могут это сломать.

Распространенные ошибки:

  1. С помощью find /c /v и попробуйте найти то, что никогда не включается в имя файла, например ::. Не будет. Работай. Надежно. Когда окно консоли настроено на растровые шрифты, вы жестяная банка получить эту комбинацию символов. Я могу включать символы в имя файла, например :, ?и т. д. в их полноразмерных вариантах, например, которые затем будут преобразованы в свои обычные аналоги ASCII, что нарушит это. Если вам нужен точный подсчет, не пытайтесь это сделать.

  2. С помощью find /c и попробуйте найти то, что всегда включены в имя файла. Очевидно точка (.) - плохой выбор. Другой ответ предполагает

    dir /a-d | find /c ":"
    

    который предполагает несколько вещей о локали пользователя, не все из которых гарантированно верны (я оставил комментарий с подробным описанием проблем) и возвращает один результат слишком часто.

Как правило, вы хотите использовать find на dir /b который отсекает все вещи, не связанные с именами файлов, и таким образом избегает ошибок в столбах.

Итак, элегантный вариант:

dir /b /a-d | find /c /v ""

который сначала выведет все имена файлов, по одной строке каждое. А затем подсчитайте все строки этого вывода, которые не пусты. Поскольку имя файла не может быть пустым (если я чего-то не упускаю, но Unicode не отключит это согласно моим тестам).

Просите, и дано будет вам: http://technet.microsoft.com/en-us/library/ee692796.aspx

Подсчет количества элементов в папке

Что вы знаете: похоже, солнце наконец-то вышло, а значит, нам почти пора уходить. Однако прежде чем мы это сделаем, давайте покажем вам еще один маленький трюк с командлетом Get-ChildItem. Иногда вам не нужно много знать о файлах в папке; все, что вам действительно нужно знать, это сколько файлов (если есть) можно найти в определенной папке. Вот как можно быстро подсчитать количество файлов в папке:

(Get-ChildItem C:\Scripts).Count

Что мы здесь делаем? Мы просто используем Get-ChildItem, чтобы вернуть коллекцию всех элементов, найденных в папке C: \ Scripts; поскольку это коллекция, все, что нам нужно сделать, - это вернуть значение свойства Count, которое сообщает нам количество элементов в коллекции. Обратите внимание на использование круглых скобок: мы заключаем команду Get-ChildItem в круглые скобки, чтобы убедиться, что Windows PowerShell сначала захватит коллекцию, а только затем вернет значение свойства Count для этой коллекции.

И конечно, вы можете включить фильтр при вызове Get-ChildItem. Вам нужно знать, сколько файлов .PS1 находится в папке C: \ Scripts? Окей-док:

(Get-ChildItem C:\Scripts -filter "*.ps1").Count

FYI .. Я googledd "файлы подсчета PowerShell".

dir /a-d | find "File(s)"

Небольшое предупреждение об использовании PowerShell для таких простых файловых операций - он невероятно медленный по сравнению с cmd.exe, особенно при использовании сетевых подключений или когда в каталоге находятся тысячи файлов. Видеть это сообщение на форуме для получения дополнительной информации.

dir внизу отображается общее количество файлов.

Самый быстрый способ, который я нашел, - запустить на консоли PS следующее.

[System.IO.Directory]::GetFiles($path).Count

где $ path - это локальный путь или общий ресурс UNC.

просто подсчитайте строки из вывода dir / B (включая каталоги):
dir /B | find /c /v "~~~"

только для подсчета файлов (без каталогов):
dir /A-D /B | find /c /v "~~~"

Нашел этот в сети:

dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%

Я тестировал, и вроде работает.

Просто предостережение для тех, кто может использовать ответ Trevoke PowerShell выше (Командная строка 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 возвращает количество файлов и каталогов внизу

DIR конечно будет работать

Не устанавливая что-либо на сервере, но имея PowerShell на своей рабочей станции, вы можете:

(gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count

эта команда предоставит вам все файлы (системные и скрытые), и, как упоминалось ранее, если на компьютере есть powershell, вы можете просто

(GCI c:\*.*).count

Обратите внимание: если вы не добавите . вы получите количество всех файлов и всех каталогов. Вы не будете включать скрытые и системные файлы, которые необходимо добавить - принудительно подсчитать их все

Если бы мне это нужно было только один раз, я бы просто использовал dir, в противном случае я бы подумал о том, чтобы развернуть свой собственный, вероятно, как приложение C #, потому что это то, с чем я был бы лучше всего знаком (хотя VBScript или PowerShell также были бы жизнеспособными).

(Кстати - это не DOS, если вы используете cmd.exe)

Я считаю, что вы можете использовать attrib для получения количества файлов:

attrib.exe /s /D *.*|find /c /v "" >> filecount.txt

Это создаст файл с именем filecount.txt в текущем каталоге с количеством файлов и папок в текущем каталоге (включая вновь созданный файл). Вы можете изменить

*.*

к

<full_path>\*.*

чтобы получить количество файлов в определенном каталоге. Удалите параметр «/ D», если вы не хотите подсчитывать папки. Параметр «/ s» обрабатывает файлы во всех каталогах по указанному пути. Поэтому удалите его, если вам нужны только файлы по указанному пути и вы не хотите включать файлы во вложенные папки.

Так, например, если вы хотите узнать, сколько файлов находится на вашем диске C: \, а не в какой-либо подпапке, вы должны использовать команду:

attrib.exe C:\*.* | find /c /v "" >> filecount.txt

Я делаю нечто подобное, и это мгновенно работает с любым количеством файлов.

Setlocal enabledelayedexpansion

Dir /A | find "File(s)" >tmp

For /F "tokens=1" %%i in (tmp) do set n=%%i

Del tmp

If !n! GEQ 10 echo Too many files in directory.