Компьютерный форум 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=355634)

Shinkiro 25-08-2024 16:11 3030239

Перенос файлов с одинаковой частью имени, в папки названные этой частью имени.
 
Доброго дня, пробовал найти поиском решение но не вышло, в общем есть 10 000 картинок в папке, почти у в имени файла присутствует имя автора всегда начинается с by_, а заканчиваться может по разному или сразу тип файла или - или _ после которых набор произвольных символов, пробелов вроде не встречал.
Выгледят так:
Golden_Witch_by_burstchicken-32113892fa.jpg
Symphony_of_Destruction_by_dasAoD.jpg
planet_earth_by_microbot23-d3cfd0v.jpg
Feather_Dancer__line_art_by_wayoftheGoo.jpg
The_Homeworld_by_microbot23.jpg
For_the_record_by_wayoftheGoo.jpg
Night__Inventory_by_wayoftheGoo.jpg
Aphrodite_ix_by_wayoftheGoo.jpg
untitled_yellow_by_pitrih.png
kiss_study_1_by_wayoftheGoo_f77rklas.jpg
Night_Kiss_by_sketcher2007.jpg
do_not_breathe____by_Pockypuu.jpg
tribal_dragon_by_yigitkoroglu-d316rs4.jpg

нужно, каждый файл в котором есть имя автора переместить в папку с его именем

DJ Mogarych 26-08-2024 06:50 3030265

Powershell
Код:

$dir = 'c:\temp\pict'

cd $dir
dir -file |group {$_.basename -replace '.*_by_([a-zA-Z\d]+).*','$1'} |% {
    mkdir $_.name -ErrorAction SilentlyContinue > $null
    mv $_.group $_.name
}


megaloman 26-08-2024 12:36 3030281

cmd
Код:

@Echo Off &Cls &SetLocal EnableDelayedExpansion
        Set "FileIn=Z:\Box_In\*_by_*.*"
        Set "BoxOut=Z:\Box_In"
        For %%f In ("%FileIn%") Do (
                Set "Name=%%~nf"
                For /F "delims=._-" %%d In ("!Name:*_by_=!") Do (2>nul Md "%BoxOut%\%%d" &>nul Move "%%f"        "%BoxOut%\%%d\")
        )
Pause
Exit /B

Если батник в папку с файлами и папки создаются здесь же, можно и так
Код:

@Echo Off &Cls &SetLocal EnableDelayedExpansion
        Set "FileIn=%~dp0*_by_*.*"
        Set "BoxOut=%~dp0"
        For %%f In ("%FileIn%") Do (
                Set "Name=%%~nf"
                For /F "delims=._-" %%d In ("!Name:*_by_=!") Do (2>nul Md "%BoxOut%\%%d" &>nul Move "%%f"        "%BoxOut%\%%d\")
        )
Pause
Exit /B


Shinkiro 26-08-2024 20:38 3030313

DJ Mogarych, Спасибо, почти работает он сам себя в папку запихнул и в тестовой папке был батник 123.bat его тоже запихнуло в папку 123
megaloman, Вариант "батник в папке с файлами", то что доктор прописал. Спасибо! :up


Время: 18:59.

Время: 18:59.
© OSzone.net 2001-