1

Тема: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Здравствуйте, задача практически решена в виде BAT файла по нижеуказанной ссылке, благодаря Rumata, но оказалось, консоль не может работать с юникодными именами папок такого вида: "Noël Akchoté – Perpetual Joseph" и не проверяет их на наличие .CUE, возможно ли обойти эту проблему с AutoHotKey?

http://forum.script-coding.com/viewtopic.php?pid=130971

Здравствуйте, для правильного перекодирования Lossless музыки (FLAC/APE), мне нужно отделить потрековые альбомы (несколько файлов FLAC/APE + CUE) от альбомов образами (один FLAC/APE + CUE), думал думал как это сделать и надумал, что нужно найти все папки, в которых есть CUE файл/файлы и один FLAC/APE файл, а уже потом разбираться с этими альбомами вручную.

0</*! ::
@echo off

call :main %* > "%~dpn0.txt"

goto :EOF

:main
setlocal

set "workdir=%~1"
if not defined workdir set "workdir=."

for /f "tokens=* delims=" %%f in ( '
	dir /b /s "%workdir%\*.cue" ^| cscript //nologo //e:javascript "%~f0"
' ) do for /f "tokens=*" %%n in ( '
	dir /b /s "%%~ff\*.flac" "%%~ff\.ape" ^| find /v /c ""
' ) do if %%~n equ 1 echo:%%~ff

goto :EOF

*/0;

var seen = {};

while ( ! WScript.StdIn.AtEndOfStream ) {
	var dir = WScript.StdIn.ReadLine().replace(/\\[^\\]+$/, "");
	seen[dir] = 1;
}

for (var p in seen) {
	WScript.StdOut.WriteLine(p);
}

2

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Zak пишет:

нужно найти все папки, в которых есть CUE файл/файлы и один FLAC/APE файл

А где искать-то? По всему компьютеру, или в конкретной указанной корневой папке? Если в конкретной папке, то как она на вход должна подаваться?
Возможные варианты — папка скрипта; папка, жёстко прописанная в скрипте; папка, выбранная через диалог выбора папок.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Zak, 2019-01-11 02:46:47)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Только в определённой папке, например: V:\Jazz\. Удобнее, третий вариант, но для этого нужен же GUI. И тогда уже выходной .txt файл сохранять рядом со скриптом и именовать его по адресу корневой папки вроде: V-Jazz, чтобы с другими папками не совпадал.

Но, главное, конечно, разобраться с кодировками, но в батнике ещё проблема с кириллическими буквами, в выходном файле он их заменяет на всякие знаки: "ц" на "ж", "й" на "©", "ш" на "и" и т.п.

4

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Ещё не совсем я понял, если найден единственный FLAC/APE файл в папке V:\Jazz\Zaz\2014. Zaz - Paris (2014, Limited Edition)\CD, и один в папке V:\Jazz\De-Phazz\2002 Daily Lama, что должно оказаться в выходном файле?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Zak, 2019-01-11 03:06:51)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Если рядом с ними лежит один или несколько файлов с расширением .CUE, то оба:

V:\Jazz\De-Phazz\2002
V:\Jazz\Zaz\2014. Zaz - Paris (2014, Limited Edition)\CD

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

ZAZ CD1.flac
ZAZ CD1.cue
ZAZ CD2.flac
ZAZ CD2.cue
ZAZ Bonus CD.flac
ZAZ Bonus CD.cue

6 (изменено: teadrinker, 2019-01-11 03:08:40)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Ясно, меня просто это с толку сбило:

Zak пишет:

сохранял имя корневой папки в текстовый файл

Так понимаю, имелось в виду название файла?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: Zak, 2019-01-11 03:15:15)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Аа, нет, имелось в виду название первой папки, но подумал, зачем усложнять, ну и бывает в одной папке альбомы разного вида. Если это легко, то хотелось бы два файла на выходе, первый укороченный и второй полный, на Ваше усмотрение, конечно.

V:\Jazz\De-Phazz\2002
V:\Jazz\Zaz\2014. Zaz - Paris (2014, Limited Edition)\CD
V:\Jazz\2000.Various Artists - no99 (No Music Festival 1999, 5CD)\CD1

8

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Ясно, с кодировками в AHK не должно быть проблем, попробую написать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Спасибо, надеюсь, всё получится.

10

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Zak, вы и сам можете попробовать написать скрипт.
https://autohotkey.com/docs/commands/LoopFile.htm

11

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Так как-то:

SetBatchLines, -1
firstFile := A_ScriptDir . "\RootDirs.txt"
secondFile := A_ScriptDir . "\DirFullPaths.txt"

FileSelectFolder, rootDir, *%A_ScriptDir%, 0, Выберите корневую папку
Loop, Files, %rootDir%\*, DR
{
   cue := ape := 0
   Loop, Files, %A_LoopFilePath%\*.*, F
   {
      if (A_LoopFileExt = "cue")
         cue := true
      if A_LoopFileExt in ape,flac
         ape++
   }
   if (cue && ape = 1)  {
      FileAppend, % RegExReplace(A_LoopFilePath, "\Q" . rootDir . "\\E.+?\K\\.*") . "`r`n", % firstFile, 
      FileAppend, % A_LoopFilePath . "`r`n", % secondFile
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12 (изменено: Zak, 2019-01-11 04:06:52)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Malcev
К сожалению, я гуманитарий.

teadrinker
А куда сохраняется выходной файл? После выбора папки, процесс проходит и отключается. Судя по всему, должны быть рядом с .AHK файлом, а нет.

13 (изменено: teadrinker, 2019-01-11 04:10:03)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

В папке скрипта должны быть два файла, один с полными путями, другой с названиями корневых папок. Если пусто — значит ничего не найдено.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Сейчас обновлю, может быть проблема в версии AHK, у меня портативная 1.1.24.0 x64.

15

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Убедитесь, что версия AHK актуальная.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ Zak

16 (изменено: Zak, 2019-01-11 04:36:48)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Урааа, работает! Спасибо большое! Сейчас потестю.

С кодировками не вышло, точнее он просто корректно переводит "ö" в "o", "å" в "a", но не копирует имя в оригинале. Зато проблема с киррилицей ушла, а это отлично! Ещё добавьте пожалуйста удаление дублей в RootDirs.txt файл, тогда можно будет ещё точнее увидеть различия.

Noël Akchoté – Perpetual Joseph превращает в Noel Akchote ?– Perpetual Joseph, не думал, что кодировки такая проблема. Надо бы как-то откорректировать имена самих папок, вот только как.

17

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Так кодировка должна сохраниться:

SetBatchLines, -1
FileEncoding, UTF-8
FileSelectFolder, rootDir, *%A_ScriptDir%, 0, Выберите корневую папку

shortFile := A_ScriptDir . "\" . RegExReplace(rootDir, "[\\\:]+", "-") . "-Short.txt"
longFile := A_ScriptDir . "\" . RegExReplace(rootDir, "[\\\:]+", "-") . "-Full.txt"
FileDelete, % shortFile
FileDelete, % longFile

existing := {}

Loop, Files, %rootDir%\*, DR
{
   cue := ape := 0
   Loop, Files, %A_LoopFilePath%\*.*, F
   {
      if (A_LoopFileExt = "cue")
         cue := true
      if A_LoopFileExt in ape,flac
         ape++
   }
   if (cue && ape = 1)  {
      short := RegExReplace(A_LoopFilePath, "\Q" . rootDir . "\\E.+?\K\\.*") . "`r`n"
      if !existing.HasKey(short)  {
         FileAppend, % short, % shortFile
         existing[short] := true
      }
      FileAppend, % A_LoopFilePath . "`r`n", % longFile
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18 (изменено: Zak, 2019-01-11 05:04:10)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

teadrinker
Вы мастер, сработало! Спасибо! Буду тестить далее.


В тестах всё совпало просто идеально! Если не сложно, можете сделать версии для поиска папок с 2, 3, 4, 5... FLAC/APE файлами? Т.е. когда в папке 2 FLAC/APE файла и 2 и более CUE файлов, 3 и 3 и более и т.д., но чтобы они не перемешивались, тогда можно будет очень легко вручную отделить много-дисковые альбомы от мало-трековых.

19

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Zak пишет:

К сожалению, я гуманитарий.

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

20

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Zak пишет:

Если не сложно, можете сделать версии для поиска папок с 2, 3, 4, 5

Да не то, чтобы сложно, но время займёт. Так что, если хотите, пишите сюда, или в личку, платно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

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

teadrinker
Хорошо, понятно, кстати, додумался как можно ещё усовершенствовать поиск много-дисковых альбомов, добавить опционально поиск .log файлов, по количеству, равных или более количеству FLAC/APE файлов.

22

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

А вы думаете, что тут сплошные технари?
Ошибаетесь.
Автохотки создан специально для тех, кто в программировании ни сном ни духом.
И задачи, типа вашей, решается прочтением справки, попыткой составления кода и вопросами по вашему коду на форуме.
Ну а если вам изучать автохотки не хочется, то, предположу, что рано или поздно отвечать вам завсегдатаям надоест и вас будут отправлять в коммерческий раздел.

23

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Malcev
Предположу, что не технари не способны создать что-либо достаточно сложное, в основном же переназначение клавиш. А изучать, не потому что не хочется, а потому что не можется, ведь никто же не будет мне помогать с каждым шагом, разъяснять элементарную базу и переводить английский FAQ. Вот пример того, что значит отсутствие базовых знаний. Ну и согласитесь, изучать довольно сложную штуку для далёкого от этого человека, ради одного-двух скриптов, это как-то нерационально и слабо реализуемо на практике. Понимаю Ваше желание вовлечь в хорошее дело, как можно больше людей. Быстро я успел надоесть.

teadrinker я попросил версию для 2-х и более файлов, т.к. думал это делается парой строчек, как и сам скрипт удивил своей лаконичностью.

24

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Есть справка на русском:
http://script-coding.com/AutoHotkeyTranslation.html

25 (изменено: Zak, 2019-01-13 07:57:09)

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Malcev
За пару часов попыток разобраться, я лишь смог добавить .wv формат для поиска, прогресс! А уж как искать по два или три файла с этими расширениями в справке не примеров не подсказок. Логику то кода я понимаю, но не всю, вот например, почему "if (cue && ape = 1)", по моей логике он должен искать только ape, а он ищет ещё и flac с wv. Тогда должно быть "if (cue && ape or flac or wv = 1)". Далее, что значит "ape++"? А Вы говорите реально самому сделать.

26

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

a := 0
b := 0
if (a && b = 1)
   msgbox  1

a := 0
b := 1
if (a && b = 1)
   msgbox  2

a := 1
b := 0
if (a && b = 1)
   msgbox  3

a := 1
b := 1
if (a && b = 1)
   msgbox  4

a := 0
a++
msgbox % a

27

Re: AHK: Найти все папки с .CUE файл-ом/ами и !одним! FLAC/APE файлом

Malcev
Стыдно, почувствовал себя на месте Царёва.