Операции с файловой системой через командлеты
Операции с файловой системой — одна из самых распространённых и практичных задач в 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 очень мощный в операциях с файловой системой и имеет следующие преимущества:
- Команды интуитивно понятны и унифицированы, низкие затраты на обучение
- Поддерживает операции с объектами и может комбинироваться с другими командами
- Может использоваться для пакетных задач и сценариев автоматизации
Рекомендуемый подход к обучению:
- Многократно отрабатывайте различные команды во временном каталоге
- Освойте пять основных команд:
New-Item、Remove-Item、Copy-Item、Get-Content、Set-Content - Попробуйте инкапсулировать команды в скрипты для пакетной обработки нескольких файлов