Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Обработка файлов в зависимости от расширения

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun May 29, 2011 11:54    Post subject: Обработка файлов в зависимости от расширения Reply with quote

ЛС wrote:
Иногда возникает необходимость в декомпрессии lossless аудио-файлов в формат WAV. Конкретно речь идёт о FLAC, APE, ALAC: flac.exe, MAC.exe, alac.exe.
Я изучил параметры программ, и написал следующие юзер-команды (их выполнение приводит к созданию WAV-файла %P%O.wav).
Code:
[em_FLAC->WAV]
cmd=C:\Program Files\Tools\FLAC\flac.exe
param=-d %P%N
menu=Декомпрессия FLAC в WAV
Code:
[em_APE->WAV]
cmd=C:\Program Files\Tools\MAC\MAC.exe
param=%P%N "%P%O.wav" -d
menu=Декомпрессия APE в WAV
Code:
[em_ALAC->WAV]
cmd=C:\Program Files\Tools\ALAC\alac.exe
menu=Декомпрессия ALAC в WAV
param=-f "%P%O.wav" %P%N
Вышеприведённое работает лишь для одного файла, причём всегда необходимо смотреть на формат исходного файла.
Собственно, просьба в следующем: сделайте пожалуйста батник, который можно повесить на кнопку, и приписав оной некоторые параметры, уже НЕ задумываться о формате исходного lossless-файла.
То есть: выделили всё вперемешку (FLAC, APE, ALAC), нажали кнопку - получили кучу WAV-файлов, они "сделаны" разными экзешниками.
То есть в батнике ветвление, некоторое, если формат такой-то - обрабатывать одним экзешнком, иной формат - другим.
Формат файла в данном случае определяется исключительно расширением.


Code:
@echo off &setlocal enableextensions &chcp 1251 >nul
rem Обработка файлов в зависимости от расширения
rem Параметры: "%L"
rem Автор: Tol!k
for /f "usebackq delims=" %%s in ("%~1") do (
  for /f "delims=" %%f in ('dir /b/s/a-d/o-n "%%s"') do (
    title "%%f" &echo "%%f"
    if not "%%~xf"=="" call :%%~xf "%%f"
    echo -------------------------------------------------------------------------------
  )
)
title Done. &pause
goto :eof

:.FLAC
rem Decoding: flac -d [<general-options>] [<format-options>] [FLACFILE [...]]
"C:\Program Files\Tools\FLAC\flac.exe" -d -f %1
goto :eof

:.APE
rem Decompress: mac.exe "Metallica - One.ape" "Metallica - One.wav" -d
"C:\Program Files\Tools\MAC\MAC.exe" %1 "%~dpn1.wav" -d
goto :eof

:.M4A
rem Usage: alac [options] [--] file
"C:\Program Files\Tools\ALAC\alac.exe" -f "%~dpn1.wav" %1
goto :eof


*.alac не проверял

Add:
campoviy wrote:
> Не удается найти указанную метку пакетного файла - .m4a

Решил проблему заменой строки ":.ALAC" на ":.M4A"; соответственно, поправьте пожалуйста пост.

OK


Last edited by Tol!k on Mon May 30, 2011 22:18; edited 2 times in total
Back to top
View user's profile Send private message
campoviy



Joined: 18 Dec 2010
Posts: 109
Location: Russian Federation, Krasnodar region

Post (Separately) Posted: Sun May 29, 2011 15:00    Post subject: Reply with quote

Tol!k
Большое спасибо, это именно то, что нужно! Smile
Quote:
*.alac не проверял
Apple Lossless decoders: Generic Win32 compile; P4 Win32 compile.
А вот, версия (тоже без зависимостей), скопилированная в Visual Studio 2010, из актуальных исходников.
Взялся проверить, наткнулся на:
Quote:
Не удается найти указанную метку пакетного файла - .m4a
-------------------------------------------------------------------------------

Для продолжения нажмите любую клавишу . . .
Решил проблему заменой строки ":.ALAC" на ":.M4A"; соответственно, поправьте пожалуйста пост.

Однако, для любителей VBS-скриптов могу предложить такой вариант, автор - Batya:
Code:
'======================================================================
' Исполнение связанной программы в зависимости от расширения файла
'   для каждого файла из файла-списка и для каждого вложенного файла
'   для папок из файла-списка. Исполнение выполняется последовательно.
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'======================================================================
Option Explicit
Dim FSO, WSH, FF, F

With WScript
  If .Arguments.Count = 0 Then
    MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Исполнение связанных программ"
    .Quit
  End If
  FF = .Arguments(0)
End With

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")

With FSO.OpenTextFile(FF, 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FolderExists(F) Then ForFolder FSO.GetFolder(F)
      If FSO.FileExists(F)   Then WSH.Run CommandLine(FSO.GetFile(F)), 1, True
    End If
  Loop
  .Close
End With

Set FSO = Nothing
Set WSH = Nothing
WScript.Quit

Sub ForFolder(pFolder)
  Dim lF
  For Each lF In pFolder.Files
    WSH.Run CommandLine(lF), 1, True
  Next
  For Each lF In pFolder.SubFolders
    ForFolder lF
  Next
End Sub

Function CommandLine(pFile)
  Dim lPath, lName, lExt
  lPath = pFile.ParentFolder.Path
  lName = FSO.GetBaseName(pFile)
  lExt  = UCase(FSO.GetExtensionName(pFile))
  Select Case lExt
    Case "FLAC"
      CommandLine = """C:\Program Files\Tools\FLAC\flac.exe"" -d """ & pFile & """"
    Case "APE"
      CommandLine = """C:\Program Files\Tools\MAC\MAC.exe"" """ & pFile & """ """ & lPath & "\" & lName & ".wav"" -d"
    Case "M4A"
      CommandLine = """C:\Program Files\Tools\ALAC\alac.exe"" -f """ & lPath & "\" & lName & ".wav"" """ & pFile & """"
  End Select
End Function
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon May 30, 2011 09:22    Post subject: Reply with quote

Замечу, что мой скрипт, в отличие от приведённого выше батника, также обрабатывает каждый вложенный файл из выделенных папок.
Для кого-то это может быть плюсом, для кого-то - минусом, но надо иметь в виду.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
campoviy



Joined: 18 Dec 2010
Posts: 109
Location: Russian Federation, Krasnodar region

Post (Separately) Posted: Mon May 30, 2011 11:45    Post subject: Reply with quote

Batya
Batya wrote:
мой скрипт, в отличие от приведённого выше батника, также обрабатывает каждый вложенный файл из выделенных папок
Весьма важное замечание (я скрипт не тестировал).
Batya wrote:
Для кого-то это может быть плюсом, для кого-то - минусом, но надо иметь в виду.
Лично для меня - плюс. В любом случае, положение дел (каким образом скрипт поступает с файлами в выделенных каталогах) оглашено.

Tol!k
А можно в батнике такое (как в скрипте Batya - обработка содержимого вложенных файлов из выделенных каталогов) осуществить? Если "да", то очень Вас прошу, пожалуйста.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon May 30, 2011 22:18    Post subject: Reply with quote

Сделано.

+ В конце файла можно добавить
Code:
:.CUE
:.DOC
:.JPG
:.LOG
:.M3U
:.PDF
:.TXT
rem Это заглушка
goto :eof
Back to top
View user's profile Send private message
campoviy



Joined: 18 Dec 2010
Posts: 109
Location: Russian Federation, Krasnodar region

Post (Separately) Posted: Tue May 31, 2011 07:18    Post subject: Reply with quote

Tol!k
Tol!k wrote:
Сделано.
Прекрасно, спасибо. Smile
Раньше было так (батник не работал с каталогами; до декомпресии):
Quote:
D:\Docs\TEMP\(01) [Sandra] Japan ist weit.ape
D:\Docs\TEMP\(05) [Laserdance] Future Generation.flac
D:\Docs\TEMP\08 One In A Million.m4a
И после декомпресии:
Quote:
D:\Docs\TEMP\(01) [Sandra] Japan ist weit.wav
D:\Docs\TEMP\(05) [Laserdance] Future Generation.wav
D:\Docs\TEMP\08 One In A Million.wav

Теперь, взялся проверить в работу с вложенными файлам, в таком случае (соответственно, выделяя каталоги Laserdance, Modern Talking, Sandra, в коих необходимые файлы и лежат):
Quote:
D:\Docs\TEMP\Laserdance\(05) [Laserdance] Future Generation.flac
D:\Docs\TEMP\Modern Talking\08 One In A Million.m4a
D:\Docs\TEMP\Sandra\(01) [Sandra] Japan ist weit.ape
Получил:
Quote:
D:\Docs\TEMP\Laserdance\(05) [Laserdance] Future Generation.wav
D:\Docs\TEMP\Modern Talking\08 One In A Million.wav
D:\Docs\TEMP\Sandra\(01) [Sandra] Japan ist weit.wav
Следовательно, батник работает правильно. Smile
И ещё, господа, раз я в первом посте уже выложил экзешник без зависимостей, "используемый батником", то завершу начатое.
FLAC v.1.2.1b bundle: MSVC8 Compile; ICL11.1.046 compile.
Соответствующего поведения MAC.exe берётся с офсайта: Latest Version - 4.10.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Jul 17, 2011 11:20    Post subject: Reply with quote

ЛС wrote:
У меня поменялись задачи. Теперь их две.
1. APE (только он, всегда) -> WAV
2. WAV (именно тот, который в предыдущем пункте) -> FLAC
<skip>
Теперь, что, собственно хотелось бы.
Автоматизировать.
Т. е.: один батник.
Выделили кучу каталогов, в которых много чего есть, но на данный момент только APE-файлы нас интересуют. Берём APE, преобразовываем в WAV, APE удаляется, WAV передается на сжатие во FLAC, удаляется WAV.

Code:
@echo off &setlocal enableextensions &chcp 1251 >nul
rem Параметры: "%L"
for /f "usebackq delims=" %%s in ("%~1") do (
  for /f "delims=" %%f in ('dir /b/s/a-d/o-n "%%s"') do (
    title "%%f"
    if /i "%%~xf"==".APE" call :.APE2FLAC "%%f" &echo -------------------------------------------------------------------------------
  )
)
title Done. &pause
goto :eof

:.APE2FLAC == Перекодирование .APE в .FLAC
"C:\Program Files\Tools\MAC\MAC.exe" %1 - -d >"%temp%\~ape2flac.wav" &&"C:\Program Files\Tools\FLAC\flac.exe" -8 -f -o "%~dpn1.flac" "%temp%\~ape2flac.wav" &&del /q %1 "%temp%\~ape2flac.wav"
goto :eof
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group