- Как получить список файлов в папке Windows
- Получение текстового файла с содержимым папки в командной строке
- Получаем список файлов с помощью Windows PowerShell
- Утилита Microsoft Fix it для печати содержимого папки
- Открываем файл и читаем его содержимое с Get-Content в Powershell
- Получение данных
- Полное и построчное чтение с поиском
- Разделение файла
- Подсчет количества строк
- Кодировки
- Чтения файла под другим пользователем
- Непрерывное чтение
- Ограничение вывода строк
- Поиск файлов по содержимому
- Изменение файла с последующей записью
- Подсчет четных чисел в файле
Как получить список файлов в папке Windows
Когда ко мне обратились с вопросом о том, как быстро вывести список файлов в текстовый файл, я понял, что ответа я не знаю. Хотя задача, как оказалось, достаточно часто встречающаяся. Это может потребоваться для передачи списка файлов специалисту (для решения какой-то проблемы), самостоятельного ведения журнала содержимого папок и других целей.
Решено было устранить пробел и подготовить инструкцию на эту тему, в которой будет показано, как получить список файлов (и вложенных папок) в папке Windows средствами командной строки, а также о том, как автоматизировать этот процесс, если задача возникает часто.
Получение текстового файла с содержимым папки в командной строке
Сначала о том, как сделать текстовый документ, содержащий список файлов в нужной папке, вручную.
- Запустите командную строку от имени администратора.
- Введите cdx:\folder\ где x:\folder\ — полный путь к папке, список файлов из которой нужно получить. Нажмите Enter.
- Введите команду dir /a /-p /o:gen >files.txt (где files.txt — текстовый файл, в котором будет сохранен список файлов). Нажмите Enter.
- Если использовать команду с параметром /b (dir /a /b /-p /o:gen >files.txt), то в полученном списке будет отсутствовать любая дополнительная информация о размерах файлов или дате создания — только список имен.
Готово. В результате будет создан текстовый файл, содержащий необходимую информацию. В команде выше, данный документ сохраняется в той же папке, список файлов из которой требуется получить. Можно также убрать вывод в текстовый файл, в этом случае список будет отображаться только в командной строке.
Кроме этого, для пользователей русскоязычной версии Windows следует учитывать то, что файл сохраняется в кодировке Windows 866, то есть в обычном блокноте вместо русских символов вы увидите иероглифы (но можно использовать альтернативный текстовый редактор для просмотра, например, Sublime Text).
Получаем список файлов с помощью Windows PowerShell
Вы также можете получить список файлов в папке используя команды Windows PowerShell. Если вы хотите сохранить список в файл, то запустите PowerShell от имени администратора, если просто просмотреть в окне — достаточно простого запуска.
- Get-Childitem -Path C:\Folder — вывод списка всех файлов и папок, находящихся в папке Folder на диске C в окне Powershell.
- Get-Childitem -Path C:\Folder | Out-File C:\Files.txt — создание текстового файла Files.txt со списком файлов в папке Folder.
- Добавление параметра -Recurse к первой описанной команде выводит в списке также содержимое всех вложенных папок.
- Параметры -File и -Directory позволяют получить список только файлов или только папок соответственно.
Выше перечислены далеко не все параметры Get-Childitem, но в рамках описываемой в этом руководстве задачи, думаю, их будет достаточно.
Утилита Microsoft Fix it для печати содержимого папки
На странице https://support.microsoft.com/ru-ru/kb/321379 присутствует утилита Microsoft Fix It, добавляющая в контекстное меню проводника пункт «Print Directory Listing», выводящий список файлов в папке на печать.
Несмотря на то, что программа предназначена только для Windows XP, Vista и Windows 7, она успешно сработала и в Windows 10, достаточно было запустить ее в режиме совместимости.
Дополнительно, на той же странице показан порядок ручного добавления команды вывода списка файлов в проводник, при этом вариант для Windows 7 подойдет и для Windows 8.1 и 10. А если вам не требуется вывод на печать, вы можете немного подправить предлагаемые Microsoft команды, удалив параметр /p в третьей строке и полностью убрав четвертую.
А вдруг и это будет интересно:
26.09.2015 в 12:27
На самом деле эту операцию можно делать и через GUI (почему-то об этом умалчивается — сколько не спрашивал, в российском представительстве МС никто ответов не дал).
Обнаружилось совершенно случайно. Действует в проводнике для любых списков (включая и найденные).
1. выделить группу файлов
2. Нажать Shift (левый или правый)
3. Удерживая Shift, вызвать контекстное меню
4. Там будет команда «копировать как путь». Ее и использовать.
Далее можно вставлять полные пути всех файлов в блокнот, excel, куда угодно.
26.09.2015 в 15:16
Ух-ты, отлично! Спасибо.
30.10.2015 в 10:08
17.11.2019 в 11:29
Только выдает то, что в самой папке, но без подпапок и прочего. А нужен полный список.
29.01.2016 в 20:04
Специально для этого сделал программу Filelist. После ее установки в контекстном меню появляется пункт «Получить список файлов». Список сохраняется в файл filelist.txt в той же папке. Скачать можно бесплатно. ( bravikov.wordpress.com )
30.01.2016 в 08:47
Дмитрий, спасибо. Вынужден был сократить только ваш адрес сайта, так как километровые URL в некоторых браузерах отображаются странно.
12.02.2018 в 12:48
27.02.2020 в 12:12
У меня не появилось в контекстном меню. Или нужна перезагрузка пк?
27.02.2020 в 13:06
После перезагрузки всё заработало. Большое вам спасибо)
25.01.2018 в 23:15
Самый простой способ. Не надо ничего устанавливать. Копируете адрес папки где находятся нужные вам файлы и вставляете его в адресную строку вашего браузера. Жмете Enter. Затем просто выделяете все и копируете. Затем можно вставить в excel, word или в блокнот и распечатать.
08.04.2020 в 04:44
20.12.2018 в 17:35
Командой dir можно сразу выводить результат в буфер обмена:
dir /a /b /o:gen | clip
10.01.2019 в 14:22
Только наверное не -Rescue а -Recurse
12.01.2019 в 15:43
02.05.2019 в 18:05
10.03.2020 в 10:12
Команда dir у меня не работает. Может, сборка такая, может, потому что корпоративная — Гейтс бы его знал!
После перепробования разных способов (соответствующие программы, вставка в браузер, какие-то командные строки) остановился на способе из первого комментария:
в папке CTRL+A — Shift+ПКМ — Копировать как путь — В блокноте CTRL+V, на а дальше обычная работа.
06.06.2020 в 13:48
На Винде 10 не получилось ни с командной строкой, ни с ПоверШелл. Я сделал так:
— в Тотал Коммандере (если вдруг кто не знаком, качайте на оф сайте — прога древняя, простая, бесплатная и наиполезнейшая) открываем нужную папку, кнопкой или в меню делаем «показать файлы без подкаталогов» (если файлов много, это может занять пару минут).
— если вам нужен просто только список, то кнтрл+а, шифт+пкм, «копировать как путь», и вставляете этот список в Ексель или куда вам там надо
— если нужен не только список, а упорядоченный по папкам, то Меню — конфигурация — настройки — наборы колонок — создать новый набор — добавить колонку — плюсик — в плагинах выбрать «Путь» — ок
— в окне с файлами сортируете по колонке «Путь», и копируете все пути файлов так, как было описано в пункте выше
Без учёта скачивания проги всё это займёт минут 10-20.
Источник
Открываем файл и читаем его содержимое с Get-Content в Powershell
Для открытия файлов и чтения его содержимого используется команда Powershell Get-Content. В этой статье рассмотрим работу команды с открытием файла, построчным чтением, поиском по содержимому строки на примерах.
Навигация по посту
Получение данных
Для открытия файла ‘C:\text.txt’ можно использовать следующую команду:
Если у вас множество файлов или вы не уверены в назывании, то вы можете использовать подстановку. Символы подстановок бывают следующих типов:
- ‘*’ — говорит об неизвестном количестве символов;
- [a,b] — говорит, что в этом месте может быть буква ‘a’ или ‘b’;
- ? — обозначает один неизвестный символ.
Каждый из символов выше можно применять вместе и неограниченное число раз, в любой части пути и имени.
В этом примере я открою сразу два файла: lmhosts и hosts:
Следующие примеры вернут аналогичный результат:
Для похожей фильтрации есть следующие параметры, которые так же позволяют использовать символы подстановок:
- Include — в этом параметре мы добавляем шаблон, по которому будем включать файл;
- Exclude — с помощью этого параметра исключает файлы;
- Filter — исключает результаты.
Для каждого из этих параметров есть обязательно условие — использовать знак ‘*’ в конце пути.
Так мы вернем все файлы с расширением ‘.txt’:
В отличие от Filter, в Include и Exclude мы можем использовать несколько значений. В этом примере мы откроем файлы формата ‘.txt’ и ‘.ini’:
Полное и построчное чтение с поиском
По умолчанию, если мы будем передавать результат команды через конвейер Powershell вывод будет построчный. Это может составить проблему, так как при дополнительных условиях у нас будет возвращаться одна строка, а не весь текст:
Что бы текст передавался полностью, а не построчно — используйте параметр Raw:
Если вам вдруг понадобится выводить по 2 или более строк за раз, можно указать их количество через ReadCount:
Разделение файла
Файл выводится построчно из-за делиметра (разделителя), который по умолчанию равен ‘\n’ (идентификатор новой строки). Мы можем разделить файл иначе, например, использовав точку с запятой:
То есть результат выше — это массив. В массивах Powershell мы можем получать содержимое по индексам. В следующем примере я просто уберу точку с запятой:
Подсчет количества строк
Построчный вывод с командой Powershell позволяет посчитать количество строк во всем файле. Для подсчета используется команда Measure-Object:
Если нужна только цифра, а не объект, можно сделать так:
Кодировки
В параметре -Encoding можно указать следующие кодировки:
Как искать файлы используя Powershell Get-ChildItem
Чтения файла под другим пользователем
В этом командлете не предусмотрена возможность открытия файла под другим пользователем. При любых попытках вы будете получать ошибки:
- Access to the path is denied
- The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.
Для обхода этих ошибок, если у вас нет другого выхода, нужно использовать Invoke-Command (команда удаленного подключения). Для ее настройки могут потребоваться дополнительные настройки описанные в другой статье.
Сам процесс открытия файла под другим пользователем будет выглядеть так:
Непрерывное чтение
С помощью параметра Wait вы можете читать файл, который в этот момент обновляется системой или другим пользователем:
Ограничение вывода строк
Можно ограничить вывод содержимого файла указав количество нужных строк в начале или конце:
- Head — выведет указанное количество строк с начала;
- Tail — выведет указанное количество строк с конца.
Так будут выведены только первые 5 строк:
Создание и изменение в Powershell NTFS разрешений ACL
Поиск файлов по содержимому
Get-Content не позволяет искать и открывать фалы находящиеся внутри других каталогов. Такой поиск называется рекурсивным и он доступен в Get-ChildItem.
В следующем примере мы вернем файлы из всех каталогов и подкаталогов:
File — возвращает только файлы. Каталоги нам не нужны.
С Get-ChildItem вы так же можете использовать Include,Exclude и Filter, которые были рассмотрены раннее. Использовать эти ключи лучше всего в первой команде т.к. это будет работать быстрее.
Через конвейер мы сможем открыть каждый файл, а с Select-Sting проверить есть ли в нем нужный текст. Так мы найдем файл с Powershell, который содержит строку ‘127.0.0.1’ в папке Windows:
Если убрать параметр Raw, то у нас выведется только та строка, которую мы искали:
Изменение файла с последующей записью
Вы так же можете изменить содержимое файла и перезаписать этот файл. Представим, что вам нужно заменить адрес ‘127.0.0.1’ в строке — это можно сделать так:
Или с помощью регулярного выражения (не точный шаблон):
Для записи в файл у нас есть два варианта. Первый — это использовать перенаправление в виде знака ‘>’, который перезапишет все содержимое файла или создаст новый файл:
Второй вариант — использовать команду Set-Content:
Функции по работе со строками в Powershell
Подсчет четных чисел в файле
У меня есть файл ‘file.txt’ со следующим содержанием:
Шаблон регулярного выражения ‘\d*\.?\d*’ говорит, что мы ищем число, после которого может быть точка, после которого могут быть еще числа. Таким образом мы захватим целые и числа с плавающей точкой.
Для выделения таких чисел из строк нужно использовать Select-String:
Нам нужно отформатировать вывод убрав пустые строки и получить значения свойства Value:
Мы можем вернуть остаток от деления использовав %. Если число делится на 2 с остатком 0, то оно будет четным:
Источник