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


Работа с файлами, папками и разделами реестра

Этот пример применяется только к платформам Windows.

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

Перечисление файлов, папок и разделов реестра

Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет Get-ChildItem предназначен специально для возврата всех элементов, найденных в контейнере, например в папке.

Если вы хотите вернуть все файлы и папки, содержащиеся непосредственно в папке C:\Windows , введите:

PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-16 8:10 AM 0 0.log -a--- 2005-11-29 3:16 PM 97 acc1.txt -a--- 2005-10-23 11:21 PM 3848 actsetup.log . 

Список выглядит примерно так, как при вводе dir команды в cmd.exe или ls в командной оболочке UNIX.

Сложные списки можно выполнять с помощью параметров командлета Get-ChildItem . Синтаксис командлета Get-ChildItem можно увидеть, введя следующее.

Get-Command -Name Get-ChildItem -Syntax 

Эти параметры можно скомбинировать и сопоставить для получения настраиваемых выходных данных.

Перечисление всех содержащихся элементов

Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для Get-ChildItem . В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. Пример:

PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll . 

Фильтрация элементов по имени

Чтобы отобразить только имена элементов, используйте параметр Name для Get-Childitem .

PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly . 

Принудительное перечисление скрытых элементов

Элементы, скрытые в проводник или cmd.exe не отображаемые в выходных Get-ChildItem данных команды. Чтобы показать скрытые элементы, используйте параметр Force для Get-ChildItem . Пример:

Get-ChildItem -Path C:\Windows -Force 

Этот параметр называется Force , так как вы можете принудительно переопределить обычное Get-ChildItem поведение команды. Force — это широко используемый параметр, который вызывает действие, которое обычно не выполняется командлетом, хотя он не может выполнять никаких действий, которые подрывают безопасность системы.

Сопоставление имен элементов с подстановочными знаками

Команда Get-ChildItem принимает подстановочные знаки в пути к элементам списка.

Так как сопоставление с подстановочными знаками обрабатывается подсистемой PowerShell, все командлеты, принимаюющие подстановочные знаки, используют одну и ту же нотацию и одинаковое поведение сопоставления. Нотация с подстановочными знаками PowerShell включает:

  • Звездочка ( * ) соответствует нулю или большему количеству вхождений любого символа.
  • Знак вопроса ( ? ) соответствует ровно одному символу.
  • Открывающая квадратная скобка ( [ ) и закрывающая квадратная скобка ( ] ) заключают в себя набор символов для сопоставления.

Далее приводится несколько примеров работы спецификации из подстановочных знаков.

Чтобы найти в каталоге Windows все файлы, имеющие суффикс .log и ровно пять символов в основном имени, введите следующую команду.

PS> Get-ChildItem -Path C:\Windows\. log Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows Mode LastWriteTime Length Name ---- ------------- ------ ---- . -a--- 2006-05-11 6:31 PM 204276 ocgen.log -a--- 2006-05-11 6:31 PM 22365 ocmsn.log . -a--- 2005-11-11 4:55 AM 64 setup.log -a--- 2005-12-15 2:24 PM 17719 VxSDM.log . 

Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву x , введите следующее.

Get-ChildItem -Path C:\Windows\x* 

Чтобы найти все файлы с именами, начинающимися на x или z, введите следующее.

Get-ChildItem -Path C:\Windows\[xz]* 

Дополнительные сведения о подстановочных знаках см. в разделе about_Wildcards.

Исключение элементов

Вы можете исключить определенные элементы с помощью параметра Exclude для Get-ChildItem . Это позволит вам выполнить сложную фильтрацию в одном операторе.

Например, вы пытаетесь найти библиотеку службы времени Windows в папке System32 и все, что вам известно об имени библиотеки, — то, что оно начинается с W и содержит 32.

Такое выражение, как w*32*.dll , найдет все библиотеки DLL, которые отвечают этим условиям, но вам может потребоваться дополнительно отфильтровать файлы и пропустить все файлы win32. Эти файлы можно опустить с помощью параметра Exclude с шаблоном win* :

PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win* Directory: C:\WINDOWS\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 3/18/2019 9:43 PM 495616 w32time.dll -a--- 3/18/2019 9:44 PM 35328 w32topl.dll -a--- 1/24/2020 5:44 PM 401920 Wldap32.dll -a--- 10/10/2019 5:40 PM 442704 ws2_32.dll -a--- 3/18/2019 9:44 PM 66048 wsnmp32.dll -a--- 3/18/2019 9:44 PM 18944 wsock32.dll -a--- 3/18/2019 9:44 PM 64792 wtsapi32.dll 

Смешение параметров Get-ChildItem

В одной команде можно использовать несколько параметров командлета Get-ChildItem . Перед тем как комбинировать параметры, убедитесь, что понимаете принципы сопоставления подстановочных знаков. Например, следующая команда не возвращает результатов:

Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll 

Результаты отсутствуют, даже если существуют две библиотеки, которые начинаются на букву z в папке Windows.

Результаты не возвращены, так как подстановочный знак указан как часть пути. Хотя команда и была рекурсивной, командлет Get-ChildItem ограничил элементы до тех, которые находятся в папке Windows с именами, заканчивающимися на .dll .

Чтобы указать рекурсивный поиск для файлов, имена которых соответствуют специальному шаблону, используйте параметр Include.

PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll 

Работа с файлами и папками

Перемещение по дискам PowerShell и управление элементами на них аналогично управлению файлами и папками на дисках Windows. В этой статье описывается выполнение конкретных задач по управлению файлами и папками с помощью PowerShell.

Перечисление всех файлов и папок в папке

Все элементы можно получить непосредственно в папке с помощью Get-ChildItem . Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает непосредственное содержимое диска C: PowerShell .

Get-ChildItem -Path C:\ -Force 

Команда выводит список только непосредственно содержащихся элементов, аналогично использованию dir команды в cmd.exe оболочке UNIX или ls в ней. Чтобы отобразить элементы во вложенной папке, необходимо указать параметр Recurse . Следующая команда выводит список всех элементов на C: диске:

Get-ChildItem -Path C:\ -Force -Recurse 

Командлет Get-ChildItem позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Вы можете выполнять сложную фильтрацию на основе других свойств элементов с помощью Where-Object .

Следующая команда находит все исполняемые файлы в папке Program Files, которые в последний раз были изменены после 1 октября 2005 года и не имеют ни меньше 1 мб, ни 10 мегабайт:

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript

Копирование файлов и папок

Копирование выполняется с помощью командлета Copy-Item . Следующая команда выполняет резервное копирование до C:\boot.ini C:\boot.bak :

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak 

Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force 

Эта команда работает, даже если целевой объект доступен только для чтения.

Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1 в новую папку C:\temp\DeleteMe рекурсивно.

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe 

Можно также скопировать избранные элементы. Следующая команда копирует все .txt файлы, содержащиеся в любом месте в C:\data C:\temp\text :

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text 

Для копирования элементов файловой системы можно использовать и другие средства. Объекты XCOPY, ROBOCOPY и COM, такие как Scripting.FileSystemObject, работают в PowerShell. Например, можно использовать com-класс Scripting.FileSystem узла сценариев Windows для резервного копирования C:\boot.ini в C:\boot.bak :

(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak') 

Создание файлов и папок

Создание новых элементов работает одинаково на всех поставщиках PowerShell. Если поставщик PowerShell имеет несколько типов элементов ( например, поставщик FileSystem PowerShell различает каталоги и файлы), необходимо указать тип элемента.

Эта команда создает папку C:\temp\New Folder :

New-Item -Path 'C:\temp\New Folder' -ItemType Directory 

Эта команда создает пустой файл C:\temp\New Folder\file.txt .

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File 

При использовании параметра Force с командой New-Item для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако при использовании New-Item -Force в уже существующем файле файл будет перезаписан.

Удаление всех файлов и папок в папке

Удалить вложенные элементы можно с помощью командлета Remove-Item , однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удалить папку C:\temp\DeleteMe , содержащую другие элементы, PowerShell запросит подтверждение перед удалением папки:

Remove-Item -Path C:\temp\DeleteMe Confirm The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): 

Если вы не хотите запрашивать каждый содержащийся элемент, укажите параметр Recurse :

Remove-Item -Path C:\temp\DeleteMe -Recurse 

Сопоставление локальной папки в качестве диска

Отобразить локальную папку можно с помощью команды New-PSDrive . Следующая команда создает локальный диск P: , корневым каталогом которого является локальный каталог Program Files, отображающийся только в сеансе PowerShell:

New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem 

Как и в случае с сетевыми дисками, диски, сопоставленные в PowerShell, сразу же отображаются в оболочке PowerShell. Чтобы создать сопоставленный диск, видимый из проводник, используйте параметр Persist. Однако с параметром Persist можно использовать только удаленные пути.

Чтение текстового файла в массив

Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее:

PS> Get-Content -Path C:\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=AlwaysOff /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional with Data Execution Prevention" /noexecute=optin /fastdetect 

Get-Content обрабатывает данные, считанные из файла, как массив с одним элементом в каждой строке содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:

PS> (Get-Content -Path C:\boot.ini).Length 6 

Эта команда наиболее полезна для получения списков сведений в PowerShell. Например, можно сохранить список имен компьютеров или IP-адресов в файле C:\temp\domainMembers.txt с одним именем в каждой строке файла. Вы можете использовать командлет Get-Content , чтобы извлечь содержимое файла и поместить его в переменную $Computers :

$Computers = Get-Content -Path C:\temp\DomainMembers.txt 

Теперь переменная $Computers представляет собой массив, содержащий в каждом элементе имя компьютера.

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

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

Команда dir также может выполняться из консоли восстановления Windows с использованием различных параметров. Дополнительные сведения см. в разделе Среда восстановления Windows (WinRE).

Синтаксис

dir [:][][] [. ] [/p] [/q] [/w] [/d] [/a[[:]]][/o[[:]]] [/t[[:]]] [/s] [/b] [/l] [/n] [/x] [/c] [/4] [/r] 

Параметры

  • d — каталоги
  • h — скрытые файлы
  • s — системные файлы
  • l — точки повторного анализа
  • r — файлы, доступные только для чтения
  • a — файлы, готовые к архивации
  • i — не файлы с индексированием содержимого
  • n — по имени в алфавитном порядке
  • e — по алфавиту по расширению
  • g — сначала каталоги групп
  • s — по размеру, самый маленький первый
  • d — по дате и времени, самый старый первый
  • Использование префикса для изменения порядка сортировки
  • c — создание
  • a — последний доступ
  • w — последняя запись
Комментарии
  • Чтобы использовать несколько параметров имени файла , разделите каждое имя файла пробелом, запятыми или точкой с запятой.
  • Вы можете использовать подстановочные знаки (* или ?), чтобы представить один или несколько символов имени файла, а также для отображения подмножества файлов или подкаталогов.
  • Можно использовать подстановочный знак *, чтобы заменить любую строку символов, например:
    • dir *.txt выводит список всех файлов в текущем каталоге с расширениями, начинающимися с .txt, например .txt, TXT1 и .txt_old.
    • dir read *.txt выводит список всех файлов в текущем каталоге, которые начинаются с чтения и с расширениями, начинающимися с .txt, например .txt, TXT1 или .txt_old.
    • dir read *.* выводит список всех файлов в текущем каталоге, которые начинаются с чтения с любым расширением.

    Подстановочный знак звездочки всегда использует короткое сопоставление имен файлов, поэтому вы можете получить непредвиденные результаты. Например, следующий каталог содержит два файла (t.txt2 и t97.txt):

    C:\test>dir /x Volume in drive C has no label. Volume Serial Number is B86A-EF32 Directory of C:\test 11/30/2004 01:40 PM . 11/30/2004 01:40 PM .. 11/30/2004 11:05 AM 0 T97B4~1.TXT t.txt2 11/30/2004 01:16 PM 0 t97.txt 

    Возможно, при вводе dir t97\* текста будет возвращен файл t97.txt. Однако при вводе dir t97\* возвращаются оба файла, так как подстановочный знак звездочки соответствует файлу t.txt2 для t97.txt с помощью карты коротких имен T97B4~1.TXT. Аналогичным образом при вводе del t97\* будут удалены оба файла.

    Примеры

    Чтобы отобразить все каталоги один за другим, в алфавитном порядке, в широком формате и с приостановкой после каждого экрана, убедитесь, что корневым каталогом является текущий каталог, а затем введите:

    dir /s/w/o/p 

    В выходных данных перечислены корневой каталог, подкаталоги и файлы в корневом каталоге, включая расширения. Эта команда также перечисляет имена подкаталогов и имена файлов в каждом подкаталоге дерева.

    Чтобы изменить предыдущий пример так, чтобы в dir отображались имена файлов и расширения, но имена каталогов пропускались, введите:

    dir /s/w/o/p/a:-d 

    Чтобы напечатать описание каталога, введите:

    dir > prn 

    При указании prn список каталогов отправляется на принтер, подключенный к порту LPT1. Если принтер подключен к другому порту, необходимо заменить prn именем правильного порта.

    Вы также можете перенаправить выходные данные команды dir в файл, заменив prn именем файла. Можно также ввести путь. Например, чтобы направить выходные данные dir в файл dir.doc в каталоге Records, введите:

    dir > \records\dir.doc 

    Если dir.doc не существует, dir создает его, если каталог Records не существует. В этом случае появится следующее сообщение:

    File creation error 

    Чтобы отобразить список всех имен файлов с расширением .txt во всех каталогах на диске C, введите:

    dir c:\*.txt /w/o/s/p 

    Команда dir отображает в широком формате список соответствующих имен файлов в каждом каталоге в алфавитном порядке и приостанавливается при каждом заполнении экрана, пока вы не нажмете любую клавишу для продолжения.

    Связанные ссылки

    • Условные обозначения синтаксиса команд командной строки

Оставьте комментарий