Меню

Powershell вывести содержимое каталога

Как получить список файлов в папке Windows

Когда ко мне обратились с вопросом о том, как быстро вывести список файлов в текстовый файл, я понял, что ответа я не знаю. Хотя задача, как оказалось, достаточно часто встречающаяся. Это может потребоваться для передачи списка файлов специалисту (для решения какой-то проблемы), самостоятельного ведения журнала содержимого папок и других целей.

Решено было устранить пробел и подготовить инструкцию на эту тему, в которой будет показано, как получить список файлов (и вложенных папок) в папке Windows средствами командной строки, а также о том, как автоматизировать этот процесс, если задача возникает часто.

Получение текстового файла с содержимым папки в командной строке

Сначала о том, как сделать текстовый документ, содержащий список файлов в нужной папке, вручную.

  1. Запустите командную строку от имени администратора.
  2. Введите cdx:\folder\ где x:\folder\ — полный путь к папке, список файлов из которой нужно получить. Нажмите Enter.
  3. Введите команду dir /a /-p /o:gen >files.txt (где files.txt — текстовый файл, в котором будет сохранен список файлов). Нажмите Enter.
  4. Если использовать команду с параметром /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, то оно будет четным:

Источник