76

Re: Переименование mp3-файлов по tag-маске с перемещением

Я проверял на автохотки 32bit c mediainfo.dll 32bit.
Всё работает.

77 (изменено: becauseim, 2016-10-25 16:08:49)

Re: Переименование mp3-файлов по tag-маске с перемещением

Malcev, переустановил AHK на 32bit, заработало примерно с такой скоростью (6-7 файлов в секунду):
http://puu.sh/rV0kd/80f72fab2e.gif
Это нормальная скорость?
Да, и сценарий окончил свою работу, оставив часть файлов. При повторном запуске скрипта, эти файлы опять же игнорируются.
Один из таких файлов: http://dropmefiles.com/FUeNV

Win10x64, AHK v1.1.25

78 (изменено: Malcev, 2016-10-25 16:35:11)

Re: Переименование mp3-файлов по tag-маске с перемещением

У меня этот файл не игнорируется и переносится.
Файлы игнорируются, те у которых mediainfo не видит тагов.
Mediainfo у меня отсюда:
https://mediaarea.net/download/binary/l … staller.7z
Также у меня и не тормозит.
Cкорей всего тормозит при переносе.
Можно проверить:

InputFolder := "D:\DropMeFiles_uCAYG"
OutputFolder := "D:\DropMeFiles_uCAYG\TEMP"
MediainfoDll := "C:\MediaInfo.dll"

a := A_TickCount
SetBatchLines -1
DllCall("LoadLibrary", Str, MediainfoDll)
Loop, Files, %InputFolder%\*.mp3
{
   file := A_LoopFileLongPath
   Media_GetTag(file)
}
msgbox % A_TickCount - a

a := A_TickCount
Loop, Files, %InputFolder%\*.mp3
{
   file := A_LoopFileLongPath
   FileMove, %file%, %OutputFolder%\
}
msgbox % A_TickCount - a


Media_GetTag(file) {
 hnd := MediaInfo_New()
 MediaInfo_Open( hnd, file )
Global Artist := MediaInfo_Get( hnd, 0,0, "Artist", 1 )
Global Track := MediaInfo_Get( hnd, 0,0, "Track", 1 )
 MediaInfo_Close(hnd)
 return
}

;  Video Properties - MediaInfo.Dll  www.autohotkey.com/forum/topic66500.html

MediaInfo_New() {
 Return DllCall( "mediainfo\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_New" )
}

MediaInfo_Open( hnd, MediaFile ) {
 Return DllCall( "mediainfo.dll\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Open", UInt,hnd
               , Str,MediaFile, UInt )
}

MediaInfo_Get( hnd, StrK=0, StrN=0, Comm="", InfK=0, Srch=0 ) {
 Return DllCall( "mediainfo.dll\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Get", UInt,hnd
               , Int,StrK, Int,StrN, Str,Comm, Int,InfK, Int,Sech, Str )
}

MediaInfo_Close( hnd ) {
 Return DllCall( "mediainfo\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Close", UInt,hnd )
}

79

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Хм. Значит он компонент не ставит. Странно. В %WinDir%\SysWOW64 закиньте файлик и зарегистрируйте:

Post's attachments

MediaInfoActiveX.dll 21.5 kb, 2 downloads since 2016-10-25 

You don't have the permssions to download the attachments of this post.

80

Re: Переименование mp3-файлов по tag-маске с перемещением

Flasher, результат попытки зарегестрировать файл
http://puu.sh/rVhMg/961783ea89.png

Win10x64, AHK v1.1.25

81 (изменено: becauseim, 2016-10-25 22:30:26)

Re: Переименование mp3-файлов по tag-маске с перемещением

Malcev, понял, почему некоторые файлы остались. Они уже были перемещены ранее. Мне необходимо, что одинаковые файлы не игнорировались либо перезаписывались, а переименовывались, т.е. дописывался в конец порядковый индекс, т.к. зачастую это бывают треки разного варианта записи.
Проверочный скрипт перемещает файлы мнгновенно.

Win10x64, AHK v1.1.25

82

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
А если из какой-нибудь несистемной папки?

83

Re: Переименование mp3-файлов по tag-маске с перемещением

Flasher
http://puu.sh/rVkm2/069335d888.png
Регестрирую таким способом:
http://puu.sh/rVko7/0eb5aa3d77.png

Win10x64, AHK v1.1.25

84

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Не, в корень диска не надо. Киньте рядом с MediaInfo.dll и оттуда пробуйте.

Скрипт поправил немного.

85

Re: Переименование mp3-файлов по tag-маске с перемещением

Если брать во внимание, что в win10 можно настроить длину пути файла - как любую длину, то можно так:

InputFolder := "D:\DropMeFiles_fAQQ9"
OutputFolder := "D:\DropMeFiles_fAQQ9\TEMP"
MediainfoDll := "C:\MediaInfo.dll"

a := A_TickCount
SetBatchLines -1
DllCall("LoadLibrary", Str, MediainfoDll)
Loop, Files, %InputFolder%\*.mp3
{
   InputFile := A_LoopFileLongPath
   Media_GetTag(InputFile)
   Artist := RegExReplace(Artist, "[<>:""/\\\|\?\*]")
   Track := RegExReplace(Track, "[<>:""/\\\|\?\*]")
   If (Artist = "") or (Track = "")
      Continue
   Dir := OutputFolder "\" Artist
   File := FileName := Artist " - " Track
   Ext := "mp3"
   IfNotExist, %Dir%
      FileCreateDir, %Dir%
   IfExist, %Dir%\%File%.%Ext%
   {
      loop
      {
         File := FileName "(" A_Index ")" 
         IfNotExist, %Dir%\%File%.%Ext%
            break
      }
   }
   FileMove, %InputFile%, %Dir%\%File%.%Ext%
}
msgbox % A_TickCount - a


Media_GetTag(file) {
 hnd := MediaInfo_New()
 MediaInfo_Open( hnd, file )
 Global Artist := MediaInfo_Get( hnd, 0,0, "Artist", 1 )
 Global Track := MediaInfo_Get( hnd, 0,0, "Track", 1 )
 MediaInfo_Close(hnd)
 return
}

;  Video Properties - MediaInfo.Dll  www.autohotkey.com/forum/topic66500.html

MediaInfo_New() {
 Return DllCall( "mediainfo\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_New" )
}

MediaInfo_Open( hnd, MediaFile ) {
 Return DllCall( "mediainfo.dll\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Open", UInt,hnd
               , Str,MediaFile, UInt )
}

MediaInfo_Get( hnd, StrK=0, StrN=0, Comm="", InfK=0, Srch=0 ) {
 Return DllCall( "mediainfo.dll\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Get", UInt,hnd
               , Int,StrK, Int,StrN, Str,Comm, Int,InfK, Int,Sech, Str )
}

MediaInfo_Close( hnd ) {
 Return DllCall( "mediainfo\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Close", UInt,hnd )
}

86 (изменено: becauseim, 2016-10-26 01:01:24)

Re: Переименование mp3-файлов по tag-маске с перемещением

Malcev, работает! Только смущает всплывающее иногда несколько раз окно с каким-то числовым значением. (Или это значение времени, за которое были произведены все операции?) В целом, то, что нужно. Было бы отлично, если бы Вы добавили условие для минимального числа файлов, для которых не надо создавать папку с именем исполнителя, а лишь перемещать по заданному пути (OutputFolder). Также, если это не сложно, как предложил Flasher, вложить в директорию исполнителя также директорию альбома.

Flasher, скрипт перезаписал, расположил MediaInfoActiveX.dll рядом с MediaInfo.dll по пути c:\Program Files (x86)\MediaInfo Lite\, но выходит прежняя ошибка. Файл MediaInfoActiveX.dll перед этим еще раз попытался зарегестрировать - к сожалению, безуспешно.

Win10x64, AHK v1.1.25

87

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Давайте возьмём несистемную папку, скажем, C:\Portable\. Распакуем туда приложенный архив и запустим таким образом:

C:\Portable\MediaInfoActiveX\wscript.exe C:\Portable\MediaInfoActiveX\RenMoveMP3.vbs <ключи>

Post's attachments

MediaInfoActiveX.7z 1.15 mb, 3 downloads since 2016-10-26 

You don't have the permssions to download the attachments of this post.

88

Re: Переименование mp3-файлов по tag-маске с перемещением

Flasher

+ открыть спойлер

http://puu.sh/rVvll/6a9fe881ec.gif

Win10x64, AHK v1.1.25

89

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim пишет:

Также, если это не сложно, как предложил Flasher, вложить в директорию исполнителя также директорию альбома.

Вообще-то я предложил куда более универсальный вариант.


becauseim
Мда. Сколько уже набралось поводов ненавидеть 10-ку...
Попробуйте на этом wscript.exe зайти в Свойства на вкладку "Совместимость", в секции "Уровень прав" отметить флажок с запуском от админа и применить.
Вообще я бы не отказался на удалёнке посмотреть, что можно сделать.

90

Re: Переименование mp3-файлов по tag-маске с перемещением

InputFolder := "D:\DropMeFiles_fAQQ9"
OutputFolder := "D:\DropMeFiles_fAQQ9\TEMP"
MediainfoDll := "C:\MediaInfo.dll"
MinFiles := 2

SetBatchLines -1
DllCall("LoadLibrary", Str, MediainfoDll)
Array := []
Loop, Files, %InputFolder%\*.mp3
{
   InputFile := A_LoopFileLongPath
   Media_GetTag(InputFile)
   If (Artist = "") or (Track = "") or (Album = "")
      Continue
   if (Array[Artist] = "")
      Array[Artist] := 1
   else
      Array[Artist]++
   n++
   Obj%n% := {InputFileKey: InputFile, ArtistKey: Artist, AlbumKey: Album, TrackKey: Track}
}
loop % n
{
   In := Obj%A_Index%.InputFileKey
   If (Array[Obj%A_Index%.ArtistKey] < MinFiles)
      Dir := OutputFolder
   Else
      Dir := OutputFolder "\" Obj%A_Index%.ArtistKey "\" Obj%A_Index%.AlbumKey
   File := FileName := Obj%A_Index%.ArtistKey " - " Obj%A_Index%.TrackKey
   Ext := "mp3"
   IfNotExist, %Dir%
      FileCreateDir, %Dir%
   IfExist, %Dir%\%File%.%Ext%
   {
      loop
      {
         File := FileName "(" A_Index ")" 
         IfNotExist, %Dir%\%File%.%Ext%
            break
      }
   }
   FileMove, %In%, %Dir%\%File%.%Ext%
}
msgbox Done


Media_GetTag(file) {
 hnd := MediaInfo_New()
 MediaInfo_Open( hnd, file )
 Global Artist := Regex(MediaInfo_Get( hnd, 0,0, "Artist", 1 ))
 Global Track := Regex(MediaInfo_Get( hnd, 0,0, "Track", 1 ))
 Global Album := Regex(MediaInfo_Get( hnd, 0,0, "Album", 1 ))
 MediaInfo_Close(hnd)
 return
}

;  Video Properties - MediaInfo.Dll  www.autohotkey.com/forum/topic66500.html

MediaInfo_New() {
 Return DllCall( "mediainfo\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_New" )
}

MediaInfo_Open( hnd, MediaFile ) {
 Return DllCall( "mediainfo.dll\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Open", UInt,hnd
               , Str,MediaFile, UInt )
}

MediaInfo_Get( hnd, StrK=0, StrN=0, Comm="", InfK=0, Srch=0 ) {
 Return DllCall( "mediainfo.dll\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Get", UInt,hnd
               , Int,StrK, Int,StrN, Str,Comm, Int,InfK, Int,Sech, Str )
}

MediaInfo_Close( hnd ) {
 Return DllCall( "mediainfo\MediaInfo" ( A_IsUnicode ? "" : "A" ) "_Close", UInt,hnd )
}

Regex(File)
{
   return, RegExReplace(File, "[<>:""/\\\|\?\*\n\r]")
}

91

Re: Переименование mp3-файлов по tag-маске с перемещением

Malcev, спасибо! Работает!
Flasher, после изменения совместимости, кажется, ничего не изменилось. Запускал из Вашего архива. У меня есть TeamViewer, можно было бы подключиться, но сейчас нахожусь за городом, где безлимит, к сожалению, только ночью. Пока пользуюсь вариантом от Malcev. Спасибо Вам за любезное старание!

Win10x64, AHK v1.1.25

92

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim пишет:

Запускал из Вашего архива.

Без распаковки? o_O
Пока пользуйтесь тем, но он сыроват по ряду пунктов.
Ночь меня не пугает. Только см. ссылку (этот клиент возьмём).

93 (изменено: becauseim, 2016-10-27 22:10:47)

Re: Переименование mp3-файлов по tag-маске с перемещением

Flasher, с распаковкой. Имел в виду, что конкретно этому wscript.exe задал необходимые свойства. Для запуска использовал следующий ключ: C:\Portable\MediaInfoActiveX\wscript.exe C:\Portable\MediaInfoActiveX\RenMoveMP3.vbs /s:"Artist\Artist - Title" /d:" - "
http://puu.sh/rXAxK/c289b34763.png

Win10x64, AHK v1.1.25

94

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Я, конечно, сомневаюсь, что это поможет, но попробуйте временно заменить wscript.exe тем, что в SysWOW64.

95

Re: Переименование mp3-файлов по tag-маске с перемещением

Flasher, то же самое.

Win10x64, AHK v1.1.25

96

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Ясно. Сбрасывайте ID для Ammyy мне в ЛС, посмотрим, что там.

97

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Попробуйте установить этот рантайм и ещё раз протестировать.

98

Re: Переименование mp3-файлов по tag-маске с перемещением

Flasher, извиняюсь, забыл сразу ответить. Рантайм установил, перезагрузился, но ошибка та же. Запускал на основе распакованного архива в C:\Portable c упомянутым ранее ключом.

Win10x64, AHK v1.1.25

99

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim
Давайте попробуем узнать, что там отсутствует. Нужно поставить в ТС этот плагин, установить курсор на MediaInfoActiveX.dll, нажать F3/Ctrl+Q, в окне/панели просмотра перейти на вкладку DLL Dependency, нажать плюсик. Если там будут библиотеки, отмеченные красным, то стоит скачать, закинуть в SysWOW64 и зарегистрировать.

Ссылку поправил. Её обсуждение убрал.

100

Re: Переименование mp3-файлов по tag-маске с перемещением

becauseim, как ваша проблема? Решилась? Расскажите на чем остановились.

Нас невозможно сбить с пути, нам пофигу куда идти.