Работа с файлами в PowerShell: копирование, перемещение, удаление и переименование

PowerShell — универсальный инструмент для администрирования Windows. Помимо многих возможностей автоматизации, с ним удобно управлять файлами: копировать, перемещать, удалять и переименовывать как одиночные файлы, так и целые каталоги. Ниже — подробные инструкции, часто задаваемые вопросы и практические приёмы.
Быстрая шпаргалка по основным командлетам
- Copy-Item — копирует файл или папку.
- Move-Item — перемещает файл или папку.
- Remove-Item — удаляет файл или папку.
- Rename-Item — переименовывает файл или папку.
- Get-ChildItem — перечисляет содержимое каталога (аналог DIR/ls).
- Test-Path — проверяет существование файла или пути.
Примеры базовых команд:
# Копировать один файл
Copy-Item -Path "C:\path\to\file.txt" -Destination "C:\DestinationFolder"
# Копировать папку и её содержимое
Copy-Item -Path "C:\path\to\Folder" -Destination "D:\Backup" -Recurse
# Переместить файл
Move-Item -Path "file.txt" -Destination "C:\DestinationFolder"
# Удалить файл (без корзины)
Remove-Item -Path "file.txt"
# Переименовать файл
Rename-Item -Path "C:\path\oldname.txt" -NewName "newname.txt"Важно: Remove-Item удаляет напрямую, минуя Корзину. Перед опасными операциями используйте параметр -WhatIf, чтобы увидеть, что произойдёт без фактического изменения.
Как копировать файлы и папки
- Откройте PowerShell: нажмите кнопку Пуск, введите “powershell” и нажмите Enter.
- Перейдите в нужную папку, если удобно работать из неё:
Set-Location -Path "C:\Users\[ИмяПользователя]\Downloads"- Копирование одного файла:
Copy-Item -Path "text1.txt" -Destination "C:\DestinationFolder"- Копирование папки вместе со всем содержимым:
Copy-Item -Path ".\exampleFolder" -Destination "C:\DestinationFolder" -RecurseПояснения:
- -Recurse — рекурсивно копирует вложенные каталоги и файлы.
- -Force — позволяет перезаписывать файлы и работать с защищёнными атрибутами.
- -WhatIf — показывает, какие действия будут выполнены, не изменяя файлов.
Пример с подстановкой (wildcard) и фильтрацией:
# Копировать все .txt файлы
Copy-Item -Path "*.txt" -Destination "C:\DestinationFolder"
# Копировать файлы, найденные через Get-ChildItem и фильтр
Get-ChildItem -Path "C:\Logs" -Filter "*.log" | Copy-Item -Destination "D:\Archive" -ForceКогда Copy-Item может не подойти:
- Для больших объёмов данных или повторных синхронизаций лучше использовать RoboCopy (устойчив к обрывам соединения и сохраняет атрибуты). Пример:
robocopy "C:\Source" "D:\Destination" /MIR /Z /XA:SH- Для копирования файлов, занятых другими процессами, может понадобиться VSS (теневая копия) или специальные утилиты — Copy-Item не обходит блокировки файлов.

Как перемещать файлы и папки
Перемещение выполняется командлетом Move-Item. Он действует быстро и просто:
Move-Item -Path "C:\path\filename.txt" -Destination "D:\NewFolder"Примеры для нескольких файлов:
Move-Item -Path "file1.txt", "file2.txt" -Destination "C:\DestinationFolder"
# Или с подстановкой
Move-Item -Path "*.bak" -Destination "C:\Backup"Особенности:
- При перемещении между разными дисками PowerShell фактически копирует и затем удаляет исходные файлы.
- Используйте -WhatIf, чтобы предварительно увидеть результат.
Перемещение папок
Move-Item -Path "FolderName" -Destination "C:\DestinationFolder"
Как удалять файлы и папки
Удаление файлов:
Remove-Item -Path "filename.txt"Удаление сразу нескольких файлов:
Remove-Item -Path "file1.txt", "file2.txt", "file3.txt"Удаление папки с содержимым:
Remove-Item -Path "Folder" -RecurseСоветы по безопасности:
- По умолчанию PowerShell может запрашивать подтверждение. Чтобы просмотреть действие без выполнения, добавьте -WhatIf.
- Чтобы принудительно удалить без подтверждения, добавьте -Force.
- Remove-Item удаляет сразу и не отправляет файлы в Корзину. Если нужно сначала положить в Корзину, используйте COM-объект Shell.Application:
# Отправить файл в Корзину через COM (не для всех сценариев, но работает в интерактивной сессии)
$shell = New-Object -ComObject Shell.Application
$recycleBin = $shell.Namespace(0xA)
$recycleBin.MoveHere("C:\path\to\file.txt")Когда удаление может не сработать:
- Файл занят другим процессом — сначала завершите процесс или перезагрузите систему.
- Отсутствуют права на удаление — запустите PowerShell с правами администратора или измените разрешения.
Как переименовывать файлы и папки
Переименование одного файла:
Rename-Item -Path "C:\path\to\oldfilename.txt" -NewName "newfilename.txt"Переименование папки:
Rename-Item -Path "C:\Downloads\oldfoldername" -NewName "newfoldername"Массовое переименование с использованием скриплблока:
# Заменить пробелы в именах на нижнее подчёркивание для всех .txt файлов
Get-ChildItem -Path "C:\Docs" -Filter "*.txt" | Rename-Item -NewName { $_.Name -replace ' ', '_' }
# Добавить префикс к именам файлов
Get-ChildItem -Path "C:\Images" -Filter "*.jpg" | Rename-Item -NewName { "IMG_" + $_.Name }Правило: в скриплблоке $_ представляет текущий объект — файл или папку.
Отладка, проверка и контроль успеха операций
Полезные проверки:
# Проверить, существует ли путь
Test-Path -Path "C:\DestinationFolder"
# Посчитать файлы в каталоге
(Get-ChildItem -Path "C:\DestinationFolder" -Recurse | Measure-Object).Count
# Сравнить содержимое двух папок
Compare-Object (Get-ChildItem "C:\Source" -Recurse | Select-Object -ExpandProperty FullName) (Get-ChildItem "D:\Dest" -Recurse | Select-Object -ExpandProperty FullName)Для безопасного выполнения массовых изменений используйте рабочий цикл: 1) dry run с -WhatIf, 2) выполнить на тестовой папке, 3) применить в продакшене.
Рекомендации по правам и безопасности
- Запускайте PowerShell от имени администратора только при необходимости.
- Проверяйте права доступа (ACL) перед массовыми операциями: Get-Acl / Set-Acl.
- Включайте параметр -WhatIf для рискованных команд и выполняйте резервные копии.
Практические сценарии и шаблоны
- Синхронизация папки проекта в резервную копию (используйте Robocopy для устойчивости):
robocopy "C:\Project" "D:\Backups\Project" /MIR /Z /R:3 /W:5- Перемещение логов старше 30 дней в архив:
Get-ChildItem -Path "C:\Logs" -Filter "*.log" -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Move-Item -Destination "D:\Archive\OldLogs" -WhatIf- Удаление временных файлов с подтверждением:
Get-ChildItem -Path "C:\Temp" -Filter "*.tmp" -Recurse | Remove-Item -WhatIf(После проверки уберите -WhatIf для фактического выполнения.)
Роли и чек-листы
Для администратора:
- Проверить права на папки.
- Сделать резервную копию перед массовыми удалениями.
- Использовать -WhatIf и журналирование.
Для обычного пользователя:
- Работать в своей папке профиля.
- Избегать запуска PowerShell с правами администратора для простых задач.
Для SRE/операций:
- Автоматизировать с учётом ретраев и логов.
- Использовать инструменты для надёжных копий (RoboCopy, rsync через WSL).
Критерии приёмки
- Все целевые файлы корректно скопированы/перемещены/удалены согласно заданию.
- Команды протестированы в dry-run (-WhatIf) и на тестовом наборе данных.
- Логи операций сохранены и доступны для аудита.
Часто задаваемые вопросы
В: Можно ли восстановить файл после Remove-Item?
A: Обычно нет — Remove-Item удаляет файл без отправки в Корзину. Восстановление возможно только с помощью резервных копий или специализированных инструментов восстановления.
В: Как избежать перезаписи при копировании?
A: Перед копированием проверяйте наличие файла через Test-Path или используйте логику в скрипте: если (Test-Path) { создать уникальное имя }.
В: Можно ли копировать открытые файлы?
A: Копирование открытых/заблокированных файлов может не сработать. Для таких сценариев используйте VSS или утилиты, поддерживающие теневые копии.
Итог
PowerShell даёт гибкий и мощный набор инструментов для работы с файловой системой: Copy-Item, Move-Item, Remove-Item и Rename-Item покрывают большинство задач. Применяйте -WhatIf и тестируйте команды на небольших наборах данных, используйте RoboCopy для больших объёмов и учитывайте права доступа.

Краткий чек-лист перед массовыми операциями:
- Сделать резервную копию важных данных.
- Запустить -WhatIf для предварительной проверки.
- Убедиться в правах доступа.
- Журналировать результат операции.
Похожие материалы
Отключить уведомления Facebook Live
AO3: как публиковать и улучшать тексты
Chakra UI — форма входа в React
Как настроить Google Assistant на Android и iOS
Ошибка Disney+ Error 83 — как исправить