Операции с файловой системой через командлеты

Операции с файловой системой — одна из самых распространённых и практичных задач в PowerShell.

От создания, копирования, перемещения и удаления файлов до получения атрибутов файлов и пакетной обработки структур каталогов — PowerShell предоставляет множество кратких и мощных командлетов для выполнения этих операций.


1. Просмотр содержимого каталога:Get-ChildItem

Get-ChildItem

Это команда в PowerShell для просмотра содержимого каталога (эквивалентнаlsилиdir) команде. По умолчанию выводится список всех файлов и подкаталогов в текущем каталоге.

Вы также можете использовать параметр path:

Get-ChildItem -Path C:\Test

Просмотреть все подкаталоги (рекурсивно):

Get-ChildItem -Path C:\Test -Recurse

Фильтровать по типу файла:

Get-ChildItem -Path C:\Test -Filter *.txt

2. Создание файлов и каталогов:New-Item

Создать новый каталог:

New-Item -Path "C:\Demo" -ItemType Directory

Создать новый файл:

New-Item -Path "C:\Demo\example.txt" -ItemType File

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


3. Копирование и перемещение:Copy-ItemиMove-Item

Копировать файл:

Copy-Item -Path "C:\Demo\example.txt" -Destination "D:\Backup"

Копировать всю папку (включая её содержимое):

Copy-Item -Path "C:\Demo" -Destination "D:\Backup" -Recurse

Переместить файл:

Move-Item -Path "C:\Demo\example.txt" -Destination "C:\Demo2"

4. Удаление файлов и каталогов:Remove-Item

Удалить файл:

Remove-Item -Path "C:\Demo\example.txt"

Удалить папку и её содержимое:

Remove-Item -Path "C:\Demo" -Recurse -Force

Пояснение:

  • -Recurse: Удалить всё содержимое в каталоге
  • -Force: Принудительно удалить скрытые или доступные только для чтения файлы

5. Чтение и запись файлов:Get-Content / Set-Content / Add-Content

Чтение содержимого файла:

Get-Content -Path "C:\Demo\example.txt"

Записать содержимое (перезаписать):

Set-Content -Path "C:\Demo\example.txt" -Value "Hello PowerShell"

Добавить содержимое:

Add-Content -Path "C:\Demo\example.txt" -Value "Another line"

6. Переименование файлов и проверка существования

Переименовать файл:

Rename-Item -Path "C:\Demo\example.txt" -NewName "renamed.txt"

Определить, существует ли файл:

Test-Path -Path "C:\Demo\renamed.txt"

Возвращает True, если он существует, иначе возвращает False.


7. Получение свойств файла:Get-Item

$item = Get-Item -Path "C:\Demo\renamed.txt"
$item.Length         # 文件大小(字节)
$item.CreationTime   # 创建时间
$item.Extension      # 扩展名

Примечание: возвращаемое значение — этоSystem.IO.FileInfoобъект типа, и вы можете далее использовать свойства объекта.


8. Пример комбинированной операции: пакетная обработка файлов

Пакетно вывести список всего в каталоге.logОбщий размер файлов:

Get-ChildItem -Path "C:\Logs" -Filter *.log | Measure-Object -Property Length -Sum

Пример вывода:

Count    : 15
Sum      : 1289345
Property : Length

Добавить содержимое всех файлов .txt в новый файл:

Get-ChildItem -Path "C:\TextFiles" -Filter *.txt | ForEach-Object {
    Get-Content $_.FullName | Add-Content -Path "C:\AllText.txt"
}

9. Меры предосторожности и распространённые ошибки

Проблема Описание
Пробелы в пути Используйте кавычки"чтобы заключить всю строку пути
Различайте каталоги и файлы New-ItemНеобходимо указать-ItemType FileилиDirectory
Ошибки операций, когда файл не существует ИспользуйтеTest-Pathпроверить перед обработкой
Будьте осторожны с командами удаления Remove-ItemИспользуйте-Recurseс осторожностью, чтобы избежать случайного удаления

10. Итоги и рекомендации

PowerShell очень мощный в операциях с файловой системой и имеет следующие преимущества:

  • Команды интуитивно понятны и унифицированы, низкие затраты на обучение
  • Поддерживает операции с объектами и может комбинироваться с другими командами
  • Может использоваться для пакетных задач и сценариев автоматизации

Рекомендуемый подход к обучению:

  1. Многократно отрабатывайте различные команды во временном каталоге
  2. Освойте пять основных команд:New-Item、Remove-Item、Copy-Item、Get-Content、Set-Content
  3. Попробуйте инкапсулировать команды в скрипты для пакетной обработки нескольких файлов
Другие расширения