Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создание папок по части имён файлов и перемещение в них этих файлов (http://forum.oszone.net/showthread.php?t=356416)

Floatzel 22-07-2025 19:58 3038989

Создание папок по части имён файлов и перемещение в них этих файлов
 
Прошу помочь с написанием скрипта.

Имеется: папка с множеством файлов содержащих одинаковую часть в названии.
Например:
image-01.jpg
image-02.jpg
image-03.jpg
image 2-01.jpg
image 2-01.png
image 2-10.jpg
other_ picture 17-01.jpg
other_ picture 17-02.jpg
other_ picture 17-01.png
other_ picture 17-02.png
other_ picture 17-17.png
wallpapers-picture-01.jpg
wallpapers-picture-02.jpg
wallpapers-picture-03.jpg
wallpapers-picture-09.jpg
wallpapers-picture-23.jpg

Нужно: создать папки по начальной части имени файла до последних трех символов (формата "-01" "-02" "-17" и т.д.) и переместить в них файлы содержащие эту часть.
т.е. должны создастся папки:
image
image 2
other_ picture 17
wallpapers-picture

нужно чтобы скрипт работал и в корневой папке и подпапках.

расширение файлов: .jpg, .png, .jpeg

DJ Mogarych 22-07-2025 20:40 3038992

Powershell v5
Код:

$folder = "C:\temp\pictures"

cd $folder
dir -Recurse -File -Include "*.jpg","*.png","*.jpeg" |group {$_.basename -replace '.{3}$'} |% {
    mkdir $_.Name -ErrorAction SilentlyContinue > $null
    if (Test-Path $_.Name) {
        $_.group |mv -Destination $_.Name
    }
}


Sham 22-07-2025 22:46 3038993

Цитата:

Цитата Floatzel
нужно чтобы скрипт работал и в корневой папке и подпапках. »

Как рекурсии с папками избежать. Папки создаёшь, и потом туда же лезешь и внутри получается опять создаёшь. Надо чтобы не лезть туда - или префикс какой-нибудь в имени папки, или переименование файлов при перемещении.

DJ Mogarych 22-07-2025 23:09 3038994

Скрипт выше создаёт папки на верхнем уровне, а файлы вытаскивает из всех папок рекурсивно.

megaloman 24-07-2025 21:50 3039086

Floatzel, cmd
Код:

@Echo Off &Cls
        Set "BoxIn=Z:\Soft_In"
        Pushd "%BoxIn%"||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 2)

        For /f "usebackq delims=" %%f IN (`2^>nul Dir /b /s /A:-D  "%BoxIn%\*-??.*" ^|FindStr /R /C:"-..\..*$"`) Do (
                Set "DirName=%%~nf"
                Call Set "DirName=%%DirName:~0,-3%%"
                2>nul Call MD "%%DirName%%"
                >nul Call Move /Y "%%f" "%%DirName%%\"
        )
        For /F "usebackq delims=" %%d In (`2^>nul Dir /b /s /A:D  "%BoxIn%\" /S /B /A:D ^|Sort /R`) Do 2>nul RD "%%d"
Pause 
Exit /B 2

Путь к исходной папке укажите свой вместо Z:\Soft_In
После перемещения файлов пустые папки удаляются (последний For)


Время: 06:20.

Время: 06:20.
© OSzone.net 2001-