Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 6
1

Перемещение папки в папку, названную частью имени этой папки

07.04.2019, 23:29. Показов 2665. Ответов 8

Author24 — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане!

Перерыл кучу похожих тем, но конкретно своего случая не нашел, поэтому решил написать сюда.

Имеется несколько тысяч папок с музыкой, названных в виде: Artist—Album, например Nirvana—1991 Nevermind. Требуется написать батник, который бы создавал папку, названную по типу Artist, а затем перемещал туда исходную папку с музыкой, но уже с названием в виде Album. То есть на выходе должно получиться так: папка Nirvana, внутри которой папка 1991 Nevermind.

Как видно, из общего у всех папок только знак тире. Если одним батником невозможно, можно несколькими.

В программировании я, к сожалению, почти полный нуб, а вручную всё сортировать - с ума сойдешь...

Буду очень благодарен за содействие!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2019, 23:29
Ответы с готовыми решениями:

Копирование файлов из определённой папки в папку, названную по номерам года и недели с начала года
Доброго времени суток! Необходимо копировать файлы из конкретной папки в папку, путь к которой...

Создание папки по имени файла и перемещение файла в эту папку
Добрый день , Помогите пожалуйста с батником. У меня есть целая куча файлов в одной папке,...

Найти по имени папки расположение этой папки в сети
Всем доброго дня, нужна помощь разобраться с функциями поиска. Необходимо найти по имени папки...

Переименовать папку в имя, являющееся частью имени одного из файлов, находящихся в этой папке
Прошу помощи... Имеется около тысячи папок с разными именами. В каждой папке по несколько pdf...

8
6325 / 2752 / 1070
Регистрация: 06.06.2017
Сообщений: 9,350
08.04.2019, 02:10 2
Есть vbs-скрипт на др. форуме. ЛС, чтобы скинуть, у вас пока закрыт.
Требование для ЛС: "Не менее 3 сообщений, неотрицательная репутация, не менее 2 дней на форуме.".
0
6325 / 2752 / 1070
Регистрация: 06.06.2017
Сообщений: 9,350
08.04.2019, 03:51 3
Для батника можно взять Tag (в скрепке) и id3.
Если скрипты/сценарии не горят, то есть всякие GUI:
Tiger Files Renamer
Tags 2 Folders
Tag&Rename
TagScanner
Mp3tag
DropIt
IDTE
Вложения
Тип файла: 7z Tag_2.0.53.7z (221.7 Кб, 2 просмотров)
1
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
08.04.2019, 15:02 4
Лучший ответ Сообщение было отмечено Jazz_man как решение

Решение

Цитата Сообщение от Jazz_man Посмотреть сообщение
Имеется несколько тысяч папок с музыкой, названных в виде: Artist—Album, например Nirvana—1991 Nevermind. Требуется написать батник, который бы создавал папку, названную по типу Artist, а затем перемещал туда исходную папку с музыкой, но уже с названием в виде Album. То есть на выходе должно получиться так: папка Nirvana, внутри которой папка 1991 Nevermind.
Если все эти тысячи папок лежат в одном каталоге (например D:\Music), тогда вот пример реализации на Powershell (3.0 и выше):

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$folder = 'D:\Music'
 
Clear-Host
 
Get-ChildItem -LiteralPath $folder -Directory -Filter '*—*' | ForEach {
 
    $n   = $_.Name -split ' *— *',2
    $dst = Join-Path -Path $folder -ChildPath $n[0]
 
    if (-not (Test-Path $dst))
    {
        New-Item -Path $dst -ItemType Directory -Verbose -WhatIf
    }
    
    try   {Move-Item -LiteralPath $_.FullName -Destination $dst -Verbose -ErrorAction Stop -WhatIf}
    catch {Return}
    
    Write-Host "Rename: $dst\$($_.Name) ->" $n[1] -ForegroundColor Yellow
    #Rename-Item -LiteralPath "$dst\$($_.Name)" -NewName $n[1] -Verbose
 
}
Для запуска, открыть PowerShell_ISE, создать новый документ, вставить туда скрипт, 'D:\Music' поменять на нужный каталог, нажать Ctrl+A, а затем F8

Если на экране будет, то что ожидалось, тогда убрать из скрипта все ключи -WhatIf (2 штуки) и символ # из 19-ой строки, после чего снова нажать Ctrl+A, а затем F8
1
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 6
08.04.2019, 21:06  [ТС] 5
И в первом и во втором случае выдает такое:

Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "Directory".
строка:5 знак:46
+ Get-ChildItem -LiteralPath $folder -Directory <<<< -Filter '*—*' | ForEach {
+ CategoryInfo : InvalidArgument: ( [Get-ChildItem], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
0
6325 / 2752 / 1070
Регистрация: 06.06.2017
Сообщений: 9,350
08.04.2019, 22:06 6
Лучший ответ Сообщение было отмечено Jazz_man как решение

Решение

Jazz_man, до меня только дошло, что вам теги тащить из *.mp3 не нужно.
Батник:
Windows Batch file
1
2
3
@echo off&chcp 1251>nul
for /f "tokens=1,2 delims=—" %%a in ('dir *—* /ad/b/s') do ^
md "%%a" &>nul move "%%a—%%b" "%%a" &&ren "%%a\%%~nxa—%%b" "%%b"
1
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 6
08.04.2019, 22:47  [ТС] 7
Спасибо огромное! Всё работает!
0
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.04.2019, 01:05 8
Цитата Сообщение от Jazz_man Посмотреть сообщение
Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "Directory".
У вас PowerShell 2.0, а этот скрипт, как я писал, для 3.0 и выше. Версия проверяется так:

PowerShell
1
$PSVersionTable.PSVersion
Цитата Сообщение от Jazz_man Посмотреть сообщение
И в первом и во втором случае выдает такое
Эээ... вы мягко говоря смелый человек. Запускать второй раз, без -WhatIf, я предлагал только когда на экране будет, то что ожидалось, т.е. надписи: "будет создана папка такая-то", "в неё будет перемещена папка такая-то" и "переименована так-то". Но запускать без -WhatIf, после сообщений об ошибках - очень странное решение, так можно и всех файлов лишиться...
0
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 6
09.04.2019, 14:16  [ТС] 9
Для тестирования скриптов создавал отдельную папку, в которую была скопирована часть файлов из исходной, так что всё в порядке В любом случае, спасибо за еще одно рабочее решение!
0
09.04.2019, 14:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2019, 14:16
Помогаю со студенческими работами здесь

Перемещение файлов из папки в папку
Подскажите пожалуйста, как сделать перемещение файла из в папку в папку, но -&gt; Есть список и...

Переименовать папку в имя файла внутри этой папки
Привет. Есть папка АБВ. Есть файл (внутри или где-то еще) 123. Подскажите пожалуйста, как...

Как найти путь до папки и удалить папку внутри найденной папки
Здравствуйте, есть форма, на ней кнопка1, кнопка2 и едит, нужно сделать так чтобы при нажатии на...

При нажатии на кнопку,должны выводиться только папки этой папки и их содержимое
При нажатии на кнопку,должны выводиться только папки этой папки и их содержимое.Не должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru