Powershell: Как создать папку в нескольких подпапках и переместить файлы из каждой папки в новую

Вопрос или проблема

В 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
}

Объяснение кода

  1. Set-Location: Устанавливает текущую директорию на C:\stores, чтобы последующие команды работали из этого каталога.

  2. Get-ChildItem -Directory: Извлекает все подкаталоги в текущем каталоге. Указание -Directory гарантирует, что вы получите только папки.

  3. ForEach-Object: Для каждой найденной папки выполняет заданный набор команд.

  4. Join-Path: Создает полный путь к новой папке 2024, комбинируя путь к текущей папке и имя подпапки.

  5. New-Item -ItemType Directory: Создает новую директорию. Использование параметра -Force гарантирует, что при повторном запуске не будет выдано сообщение об ошибке, если папка уже существует.

  6. Get-ChildItem -Path $_.FullName -File: Получает все файлы в текущей папке (подпапке).

  7. Move-Item -Destination $newFolderPath: Перемещает полученные файлы в новую папку 2024.

Итог

В результате выполнения данного скрипта вы получите новую структуру директории:

C:\stores\store1\2024\ file1 file2 file3 
C:\stores\store2\2024\ file1 file2

Этот скрипт позволяет эффективно управлять файлами и папками с минимальными затратами времени и усилий, соответствуя профессиональным стандартам и обеспечивая легко читаемый код.

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

Оцените материал
Добавить комментарий

Капча загружается...