Вопрос или проблема
В PowerShell я пытаюсь создать подпапку в нескольких подпапках и переместить все файлы в каждую из них в только что созданную папку.
Моя структура каталогов выглядит следующим образом:
c:\stores\store1\ file1 file2 file3
c:\stores\store2\ file1 file2 и т.д...
Мне нужно создать подпапку 2024 в каждой папке магазина и переместить файлы в нее.
Например:
C:\stores\store1\2024\ file1 file2 file3
c:\stores\store2\2024\ file1 file2
Я помню, что видел команды с Get-childitem
и Move
, но не могу разобраться. Я нашел инструкции о том, как создать все подпапки здесь, но не о том, как переместить файлы.
dir -Directory | % {md ($_.FullName + '\2024')}
Это то, что я использовал для создания подпапок из директории c:\stores
, но куда мне идти дальше и есть ли способ объединить команды, чтобы создать папку и переместить файлы в один шаг. Я видел что-то с использованием getChild
, но ничего из того, что я искал, похоже, не охватывало оба шага.
Ответ или решение
Чтобы создать новую папку и переместить все файлы из большинства подпапок в новую, можно использовать PowerShell. Давайте разберем пошагово процесс выполнения этой задачи.
Шаг 1: Определите корневой каталог
Для начала вам нужно убедиться, что вы находитесь в правильном корневом каталоге. В вашем случае это:
C:\stores
Шаг 2: Создание новой подпапки и перемещение файлов
Вам нужно создать папку с именем 2024
под каждой подпапкой (store1
, store2
и т.д.) и переместить все файлы из этих папок в новую папку. Для этого вы можете использовать сочетание команд Get-ChildItem
и Move-Item
.
Вот как это можно сделать:
# Переход в корневую папку
Set-Location C:\stores
# Получение всех подпапок и выполнение действий с ними
Get-ChildItem -Directory | ForEach-Object {
# Создание подпапки 2024 внутри каждой подпапки
$newFolderPath = Join-Path -Path $_.FullName -ChildPath '2024'
New-Item -ItemType Directory -Path $newFolderPath -Force
# Перемещение всех файлов в новую подпапку
Get-ChildItem -Path $_.FullName -File | Move-Item -Destination $newFolderPath
}
Объяснение кода
-
Set-Location: Устанавливает текущую директорию на
C:\stores
, чтобы последующие команды работали из этого каталога. -
Get-ChildItem -Directory: Извлекает все подкаталоги в текущем каталоге. Указание
-Directory
гарантирует, что вы получите только папки. -
ForEach-Object: Для каждой найденной папки выполняет заданный набор команд.
-
Join-Path: Создает полный путь к новой папке
2024
, комбинируя путь к текущей папке и имя подпапки. -
New-Item -ItemType Directory: Создает новую директорию. Использование параметра
-Force
гарантирует, что при повторном запуске не будет выдано сообщение об ошибке, если папка уже существует. -
Get-ChildItem -Path $_.FullName -File: Получает все файлы в текущей папке (подпапке).
-
Move-Item -Destination $newFolderPath: Перемещает полученные файлы в новую папку
2024
.
Итог
В результате выполнения данного скрипта вы получите новую структуру директории:
C:\stores\store1\2024\ file1 file2 file3
C:\stores\store2\2024\ file1 file2
Этот скрипт позволяет эффективно управлять файлами и папками с минимальными затратами времени и усилий, соответствуя профессиональным стандартам и обеспечивая легко читаемый код.
С помощью PowerShell вы можете автоматизировать рутинные задачи с файлами, улучшая производительность своей работы в IT.