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

hoster имеет

  • избыточные и очень быстрые и надежные соединения
  • предоставления резервного питания
  • охлаждение
  • противопожарная защита
  • защита Ваших систем и данных против против воровства и вандализма
  • лучше и более быстрые маршрутизаторы и переключатели.

Они

  • обменивайтесь поврежденными аппаратными средствами быстро.
  • заботьтесь о 24/7, даже когда Вы находитесь в отпуске или плохо.
  • может сделать ИТ-специалиста хостинга, и Вы не можете.
  • забота об автоматических резервных копиях

Таким образом, Вы можете

  • увеличьтесь или вниз быстрее и легче
  • сконцентрируйтесь на своем бизнесе (который не является корпусом сервера).
  • сэкономьте много денег
  • спите намного лучше
24
задан 26 October 2012 в 19:50
13 ответов

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

27
ответ дан 28 November 2019 в 20:14
  • 1
    +1, Который был точно, что я искал. Младшее спасибо! –  p.campbell 10 February 2010 в 03:18

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

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

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

*.*

кому:

<full_path>\*.*

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

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

attrib.exe C:\*.* | find /c /v "" >> filecount.txt
0
ответ дан 28 November 2019 в 20:14
  • 1
    Используя файлы для результатов не самая умная идея. Что Вы делаете, если текущий каталог не перезаписываем Вами? –  Joey 9 February 2010 в 19:33
  • 2
    @Johannes Используют каталог, к которому у Вас действительно есть доступ для записи? например, передайте вывод по каналу к C:\MyWritableDir\filecount.txt –  smoak 9 February 2010 в 20:01
  • 3
    Все еще ненужный. –  Joey 9 February 2010 в 23:35

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

(По тому, как - это не DOS при использовании cmd.exe),

0
ответ дан 28 November 2019 в 20:14

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

Не устанавливая что-то на сервере, но имея powershell на Вашей рабочей станции Вы могли сделать:

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

та команда даст Вам все файлы (система и скрытый включенный) и, как ранее упомянуто, если powershell будет на машине, Вы можете просто

(GCI c:\*.*).count

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

0
ответ дан 28 November 2019 в 20:14

dir возвращает количество файлов и директоров внизу

0
ответ дан 28 November 2019 в 20:14

dir дает Вам общее количество файла внизу.

7
ответ дан 28 November 2019 в 20:14
  • 1
    1 помощник, Вы побеждаете меня этому :) –  dyasny 8 February 2010 в 19:15
  • 2
    и избегать стоимости наблюдения, что все строки просматривают cmd окно путем прокрутки..., минимизируют его, it' ll работают НАМНОГО быстрее. –  gbjbaanb 8 February 2010 в 20:31
  • 3
    или всего dir > file.. ahh я пропускаю POSIX –  lorenzog 9 February 2010 в 01:28
  • 4
    @lorenz: Любая причина, почему dir > file shouldn' t работают в Windows? Перенаправление вывода isn' t точно волшебство, Вы знаете. –  Joey 9 February 2010 в 19:12
  • 5
    @johannes: это действительно работает на самом деле! Я пропускаю POSIX, потому что Вы могли "просто" сделать dir | grep (something) избегать медленной экранной записи, которая замедляет вещи (и уменьшение его в целом). –  lorenzog 10 February 2010 в 11:13

Спросите и необходимо получить: http://technet.microsoft.com/en-us/library/ee692796.aspx

Подсчет количества объектов в папке

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

(Get-ChildItem C:\Scripts).Count

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

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

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

К вашему сведению.. Я погуглил "powershell файлы количества".

17
ответ дан 28 November 2019 в 20:14
  • 1
    Необходимо добавить, что спецификация файла для проведения подсчета на самом деле считает файлы согласно второму примеру –  Jim B 8 February 2010 в 19:58
  • 2
    Только, чтобы быть ясным (Получают-ChildItem C:\Scripts).Count НЕ возвратит количество файлов в папке, это возвратит количество ОБЪЕКТОВ в папке. Необходимо добавить фильтр или спецификацию файла, чтобы заставить ее считать файлы. попробуйте (gci) .count и dir от корня Вашего C: управляйте и посмотрите на различие в числах –  Jim B 8 February 2010 в 21:49

Найденный этим в сети:

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

Я протестировал, и это, кажется, работает.

2
ответ дан 28 November 2019 в 20:14
  • 1
    “Seems to” является корректным словом здесь. (1) Это выключено одним в любом случае, начиная с эти dir, команда включает строку с двоеточием в нем, которое является не файл. (2) Это полагается на формат времени для включения двоеточия, который doesn' t обязательно должны быть так. (3) Это полагается на числовой формат не включая двоеточие, который также doesn' t обязательно должны быть так. Кроме того, прохождение через файла здесь является ненужным и won' t работают если Вы don' t имеют запись access— плохая идея. –  Joey 9 February 2010 в 19:10
dir /a-d | find "File(s)"

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

8
ответ дан 28 November 2019 в 20:14

Просто протест для тех, кто мог бы использовать ответ PowerShell Trevoke выше (командная строка Windows: как получить количество всех файлов в текущем каталоге?): дизайном, повторяя свойство Count набора, возвращенного, Добираются-ChildItem, может дать вводящие в заблуждение результаты, если значение равняется 1 или 0. Это вызвано тем, что свойство Count только доступно на массивах. Если меньше чем 2 объекта возвращаются, Добираются-ChildItem, результатом является скаляр, и.Count ничего не возвращает. Для обхождения этого явно бросьте его в массив, например, (Получите-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.

2
ответ дан 28 November 2019 в 20:14

just count lines from the dir /B output (directories included):
dir /B | find /c /v "~~~"

for just count files (with no dirs):
dir /A-D /B | find /c /v "~~~"

3
ответ дан 28 November 2019 в 20:14

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

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.
-2
ответ дан 28 November 2019 в 20:14

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

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

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

.
7
ответ дан 28 November 2019 в 20:14

Теги

Похожие вопросы