Метод 4. Используйте PowerShell для подсчета всех файлов и папок
Другим тривиальным способом подсчета файлов и папок, хранящихся в родительской папке, является использование PowerShell . Откройте окно PowerShell и направляйтесь в папку родительской папки. Запустите команду , где — путь вашей папки. Вот пример:
Если вы хотите подсчитать все элементы внутри вашей папки, независимо от того, являются ли они файлами или папками, выполните следующую команду
Обратите внимание, что он не работает рекурсивным образом, он учитывает только элементы первого уровня
Get-ChildItem | Measure-Object | %{$_.Count}
Если вы хотите подсчитать только папки внутри родительской папки, выполните следующую команду:
Get-ChildItem -Directory | Measure-Object | %{$_.Count}
Если вы хотите знать только количество файлов, запустите эту команду:
Get-ChildItem -File | Measure-Object | %{$_.Count}
Если вы хотите рекурсивно подсчитывать папки и/или файлы в родительской папке, добавьте параметр Recurse в предыдущие команды следующим образом:
- Рекурсивно подсчитывать все файлы и папки:
- Рекурсивно подсчитывать только папки:
- Рекурсивно считать только файлы:
Рекурсивно получить список всех файлов и папок
Этот пример рекурсивного поиска файлов и папок не прервется в случае ошибки, а продолжится дальше. Вместо массива здесь используется List для записи списка файлов и папок.
List ls = GetRecursFiles(PathToFolder); foreach (string fname in ls) { MessageBox.Show(fname); } private List GetRecursFiles(string start_path) { List ls = new List(); try { string[] folders = Directory.GetDirectories(start_path); foreach (string folder in folders) { ls.Add("Папка: " + folder); ls.AddRange(GetRecursFiles(folder)); } string[] files = Directory.GetFiles(start_path); foreach (string filename in files) { ls.Add("Файл: " + filename); } } catch (System.Exception e) { MessageBox.Show(e.Message); } return ls; }
Плюсом такого рекурсивного поиска так же является то, что можно еще и контролировать уровень вложенности и делать, например, отступы для разных уровней.
Настройка текущего расположения (Set-Location)Setting Your Current Location (Set-Location)
Команда Get-Location используется с командой Set-Location.The Get-Location command is used with the Set-Location command. Команда Set-Location позволяет вам указать расположение текущего каталога.The Set-Location command allows you to specify your current directory location.
Обратите внимание, что после ввода команды вы не получите прямого отклика о действии команды.After you enter the command, you will notice that you do not receive any direct feedback about the effect of the command. Большинство команд Windows PowerShell, выполняющих действия, практически не создают выходных данных, так как выходные данные не всегда полезны.Most Windows PowerShell commands that perform an action produce little or no output because the output is not always useful
Чтобы проверить успешность внесения изменения в каталог при вводе команды Set-Location, укажите параметр -PassThru при вводе команды Set-Location.To verify that a successful directory change has occurred when you enter the Set-Location command, include the -PassThru parameter when you enter the Set-Location command:
Параметр -PassThru можно использовать с некоторыми командами Set в Windows PowerShell для возврата сведений о результате, когда отсутствуют выходные данные по умолчанию.The -PassThru parameter can be used with many Set commands in Windows PowerShell to return information about the result in cases in which there is no default output.
Вы можете указать пути относительно текущего расположения так же, как и в большинстве командных оболочек UNIX и Windows.You can specify paths relative to your current location in the same way as you would in most UNIX and Windows command shells. В стандартной нотации для относительных путей точка ( . ) представляет текущую папку, а две точки ( .. ) — родительский каталог текущего расположения.In standard notation for relative paths, a period (.)represents your current folder, and a doubled period (..) represents the parent directory of your current location.
Например, если вы находитесь в папке C:\Windows, точка ( . ) представляет C:\Windows, а две точки ( .. ) представляют C: .For example, if you are in the C:\Windows folder, a period (.)represents C:\Windows and double periods (..) represent C:. Текущее расположение можно изменить на корень диска C: путем ввода следующей команды:You can change from your current location to the root of the C: drive by typing:
Тот же метод работает для дисков Windows PowerShell, которые не являются дисками файловой системы, например HKLM: .The same technique works on Windows PowerShell drives that are not file system drives, such as HKLM:. В реестре в качестве расположения можно задать раздел HKLM\Software путем ввода следующего кода:You can set your location to the HKLM\Software key in the registry by typing:
После этого можно изменить расположение каталога на родительский каталог, который является корнем диска Windows PowerShell HKLM: с помощью относительного пути:You can then change the directory location to the parent directory, which is the root of the Windows PowerShell HKLM: drive, by using a relative path:
Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов Windows PowerShell для Set-Location (cd, chdir, sl).You can type Set-Location or use any of the built-in Windows PowerShell aliases for Set-Location (cd, chdir, sl). Пример:For example:
DirLister
Последний способ получить имена всех файлов в папке, который мы рассмотрим сегодня — маленькая утилита DirLister. Для этого нужно будет пройти следующим путем:
- В поле «Directory to scan» нажмите кнопку «Open» и выберите директорию, содержимое которой требуется проанализировать
- В поле «Output file» нажмите на кнопку «Save as» и выберите местоположение файла, в который требуется записать список содержимого папки
- В разделе «Options» можно выбрать, включать ли в вывод путь к файлам («Include file path»), нужен ли рекурсивный вывод («include subfolders» и «Include directoryes») и требуется ли включать скрытые файлы («Inc. Hidden Files»)
- Блок «File Type» позволяет выбрать формат файла вывода. Доступны обычный текстовый файл (Plain Text), текстовый файл с разделителем-табулятором (TAB Separated), текст с разделителем-пробелом (SPACE Sep.), таблица Excel а также формат HTML
- После выбора всех параметров нажмите на кнопку «Make List»
На этом сегодняшний обзор закончен, надеюсь описанные в нем решения будут вам полезны.
Вариант 1. Сохраняем список файлов, воспользовавшись командной строкой
Чтобы воспользоваться этим способом, необходимо открыть папку, в которой находятся все файлы для будущего списка. Теперь нужно нажать клавишу «Shift» и кликнуть левой кнопкой мыши. Должно появиться меню, в котором выбирается пункт «Открыть окно команд».
Далее, в открывшемся окне консоли, можно увидеть путь к нужной вам директории (папке или раздел жесткого диска).
Для того чтобы создать список, следует ввести одну из указанных ниже команд:
«dir /b>filelist.txt» или «dir /s>filelist.txt» — вводить без кавычек.
При вводе нужно помнить, что вводя команду «dir» оставляем пробел, а слово «filelist» можете заменить на любое, написав его латинскими буквами. И не забывайте о формате «.txt» в самом конце команды.
Обе эти команды выполняют одинаковое действие, но различаются по своим критериям и возможностям. А именно сохранением списка файлов. А именно команда с «/b» сохраняет в списке только названия файлов. А «/s» собирает в список войдут не только основная папка, но все ее содержимое.
Теперь можно будет открыть сохраненный список при помощи программы «Блокнот».
Стоит сказать, что корректно отображаются только названия, написанные на латинском шрифте. Все остальные языки просто будут не распознаны и отображены в виде непонятных символов. Это связано с тем, что «Блокнот» просто не разбирает кодировку MS-DOS. И тогда лучший вариант для открытия списка в «Word» или его заменители. Для запуска необходимо будет щелкнуть левой клавишей мыши по файлу и выбрать в списке команд «Открыть с помощью». Тут выбираем свой текстовый редактор.
Получить список файлов в папке через Total Commander
Можно использовать и сторонние приложения, чтобы узнать список всех файлов в папке. Например, популярный файловый менеджер Total Commander позволяет это сделать.
Запустите Total Commander и найдите папку, список файлов из которой вы хотите получить. В верхнем меню нажмите “Выделить” и выберите пункт “Выделить все”.
Файлы в папке выделятся красным. Далее необходимо нажать “Копировать имена файлов в буфер”.
После этого вставьте в любой текстовый редактор скопированную в буфер обмена информацию, используя команду “Вставить” из контекстного меню или комбинацию клавиш Ctrl+V.
Обратите внимание
Total Commander предлагает и ряд других команд для копирования информации. Например, можно сразу “Сохранить выделение в файл”, либо “Копировать содержимое всех колонок”.
Копирование файлов и папокCopying Files and Folders
Копирование выполняется с помощью командлета .Copying is done with . Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:The following command backs up C:\boot.ini to C:\boot.bak:
Если целевой файл уже существует, то попытка копирования завершается неудачей.If the destination file already exists, the copy attempt fails. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.To overwrite a pre-existing destination, use the Force parameter:
Эта команда работает, даже если целевой объект доступен только для чтения.This command works even when the destination is read-only.
Так же выполняется и копирование папок.Folder copying works the same way. Эта команда копирует папку в новую папку рекурсивно.This command copies the folder to the new folder recursively:
Можно также скопировать избранные элементы.You can also copy a selection of items. Следующая команда копирует все файлы TXT, содержащиеся в папке , в папку :The following command copies all .txt files contained anywhere in to :
Для копирования элементов файловой системы можно использовать и другие средства.You can still use other tools to perform file system copies. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject.XCOPY, ROBOCOPY, and COM objects, such as the Scripting.FileSystemObject, all work in Windows PowerShell. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла в файле :For example, you can use the Windows Script Host Scripting.FileSystem COM class to back up to :
Сохранение списка файлов с помощью командной строки
Вначале вам необходимо будет перейти к нужной папке, или диску, если вы хотите получить список файлов, которые находятся на диске. После открытия папки или диска, удерживая на клавиатуре кнопку «Shift», кликните правой кнопкой мыши внутри этой папки. В открывшемся контекстном меню выберите пункт «Открыть окно команд».
После этого откроется окно консоли, в которой уже будет указан путь к нужной директории (в вашем случае, будет к той папке, которую вы откроете). В этом примере, это папка «Программы» на Рабочем столе моего компьютера. В этой папке находятся другие папки, в которых находятся ярлыки программ.
Далее нужно будет ввести одну из этих команд:
dir /b>filelist.txt dir /s>filelist.txt
После ввода «dir» должен быть пробел. Вместо «filelist» может написать свое название файла, только латинскими буквами. Не забудьте в конце добавить формат «.txt».
Эти команды отличаются друг от друга в использовании дополнительных критериев сохранения списка файлов:
- /b — обозначает, что будут сохранены только имена файлов.
- /s — обозначает, что дополнительно в список будут включены все файлы и подкаталоги (подпапки), которые находятся в этой папке.
Затем на клавиатуре нажмите на кнопку «Enter».
После этого вы можете открыть папку и увидеть, что в папке находится текстовый файл «filelist». Теперь можете открыть этот файл с помощью Блокнота.
Если в данной папке некоторые файлы имели русские имена, то вместо имен этих файлов, вы увидите непонятные символы (крякозябры). Дело в том, что программа Блокнот не понимает кодировку MS-DOS.
Поэтому, открыть созданный файл, можно будет с помощью программы Word. Предполагаю, что у большинства пользователей, на компьютере установлена данная программа.
Кликните по текстовому файлу правой кнопкой мыши, а затем в контекстном меню выберите пункт «Открыть с помощью». Выберите для открытия файла программу Microsoft Office Word. В окне программы Word будет открыто окно «Преобразование текста», в котором нужно будет выбрать кодировку MS-DOS, которая позволит прочитать этот документ.
На образце вы увидите правильное отображение текста.
После нажатия на кнопку «ОК», данный текст будет открыт в программе Word. Вы можете провести редактирование документа, а потом сохранить его на компьютере в нужном формате, в том числе в формате «TXT». Проблем с кодировкой после сохранения файла уже не будет.
Получить список файлов в папке
Для получения списка файлов можно воспользоваться методом GetFiles.
Пример поиска файлов:
string[] allfiles = Directory.GetFiles(PathToFolder); foreach (string filename in allfiles) { Console.WriteLine(filename); }
Метод GetFiles может принимать 3 параметра, из которых первый обязательный:
GetFiles(String path, String pattern, SearchOption options)
path — путь к папке, в которой ищем файлы;
pattern — шаблон поиска файлов (например, *.txt или ??abc.doc);
options — способ поиска, указывающий нужно искать только в текущей папке (SearchOption.TopDirectoryOnly) или во вложенных тоже (SearchOption.AllDirectories).
Пример поиска файлов по шаблону смотрите ниже (рекурсивный поиск).
Если список файлов очень большой, тогда лучше воспользоваться методом EnumerateFiles (доступен в .NET Framework 4.0 и выше), т.к. в отличие от GetFiles он возвращает IEnumerable и заполняет его как бы асинхронно, т.е. можно приступить к перебору списка файлов сразу, не дожидаясь получения всего списка и тем самым увеличить скорость обработки полученных файлов.
Метод EnumerateFiles так же может принимать 3 параметра:
path — путь к папке, в которой ищем файлы;
pattern — шаблон поиска файлов;
options — способ поиска.
Пример поиска файлов методом EnumerateFiles:
IEnumerable allfiles = Directory.EnumerateFiles(PathToFolder); foreach (string filename in allfiles) { Console.WriteLine(filename); }
Как видим, поиск методом EnumerateFiles аналогичен GetFiles, однако, он начнется сразу, до получения всего списка файлов, что может быть актуальным при очень большом количестве файлов.