Батник, считывающий время .mp3 и копирующий его в бефет обмена.
Необходим батник, который при запуске сканировал бы папку в которой он находится на mp3; вычислял их продолжительность, суммировал и скопировал их в буфет обмена в формате 00:00:00.
|
91892823, попробуйте скрипт vbscript :
читать дальше »
Код:
Option Explicit
Const READYSTATE_COMPLETE = 4
Dim strSourceFolder
Dim objShell
Dim objFolder
Dim objFolderItem
Dim intDuration
Dim dtTotalDuration
If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)
Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(strSourceFolder)
If Not objFolder Is Nothing Then
For intDuration = 0 To 86
If UCase(objFolder.GetDetailsOf(, intDuration)) = UCase("Длительность") Or _
UCase(objFolder.GetDetailsOf(, intDuration)) = UCase("Duration") Then
Exit For
End If
Next
dtTotalDuration = CDate("00:00:00")
For Each objFolderItem In objFolder.Items
If UCase(Right(objFolderItem.Name, 4)) = UCase(".mp3") Then
dtTotalDuration = dtTotalDuration + CDate(objFolder.GetDetailsOf(objFolderItem, intDuration))
End If
Next
With WScript.CreateObject("InternetExplorer.Application")
.Navigate("about:blank")
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
.document.parentWindow.clipboardData.setData "text", CStr(dtTotalDuration)
.Quit
End With
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]"
End If
Set objFolder = Nothing
Set objShell = Nothing
Else
WScript.Echo "Usage: " & WScript.ScriptName & " <Source folder>" & vbCrLf & _
"" & vbCrLf & _
"Or drag one folder into this script"
End If
WScript.Quit 0
Цитата:
Цитата 91892823
папку в которой он находится »
|
Это в корне неправильный подход.
|
Потребуется консольный mediainfo:
Код:
@echo off
setlocal enabledelayedexpansion
pushd %1 || goto:eof
set "mediainfo=mediainfo --Inform=Audio;%%Duration/String3%%"
for %%i in (*.mp3) do (
for /f "tokens=1 delims=." %%j in (' !mediainfo! "%%i" ') do call:sum "%%j"
)
echo %th%:%tm%:%ts% | clip
popd
goto:eof
:sum
for /f "tokens=1-3 delims=:" %%i in (%1) do (
set /a h=1%%i-100
set /a m=1%%j-100
set /a s=1%%k-100
)
set /a th+=h
set /a tm+=m
set /a ts+=s
if %ts% geq 60 (
set /a tm+=1
set /a ts-=60
)
if %tm% geq 60 (
set /a th+=1
set /a tm-=60
)
Вызывать с параметром - путь к папке с файлами mp3. Миллисекунды не считал
|
Iska, спасибо. Но я ничего не смыслю в vbscript`ах, как им хоть пользоваться?
Foreigner, консольный mediainfo?
Простите за нубство..
|
Цитата:
Цитата 91892823
как им хоть пользоваться? »
|
Сохранить код приведённого скрипта в файл с расширением «.vbs» (можно посредством Блокнота, указав кодировку ANSI при сохранении). Перетащить потребную папку на скрипт.
MediaInfo_CLI_0.7.58_Windows_i386.zip
|
Iska, спасибо еще раз. Но у меня почему-то он не совсем работает, выдает только "0:00:00".. Даже не знаю в чем причина..
Foreigner, спасибо, ваш способ работает. Есть еще вопрос: что нужно исправить в батнике, чтобы консольная версия находилась в определенном месте, чтоб не копировать ее всюду?
|
Цитата:
чтобы консольная версия находилась в определенном месте, чтоб не копировать ее всюду?
|
Либо поместить в каталог, находящийся в %PATH%
Либо в произвольный каталог, но прописать в батнике, например:
Код:
@echo off
setlocal enabledelayedexpansion
set "path=%path%;C:\BIN\Mediainfo"
...
Где C:\BIN\Mediainfo каталог утилиты
|
Foreigner, то есть так?
читать дальше »
@echo off
setlocal enabledelayedexpansion
pushd %1 || goto:eof
set "path=%path%;C:\M\Mediainfo=mediainfo --Inform=Audio;%%Duration/String3%%"
for %%i in (*.mp3) do (
for /f "tokens=1 delims=." %%j in (' !mediainfo! "%%i" ') do call:sum "%%j"
)
echo %th%:%tm%:%ts% | clip
popd
goto:eof
:sum
for /f "tokens=1-3 delims=:" %%i in (%1) do (
set /a h=1%%i-100
set /a m=1%%j-100
set /a s=1%%k-100
)
set /a th+=h
set /a tm+=m
set /a ts+=s
if %ts% geq 60 (
set /a tm+=1
set /a ts-=60
)
if %tm% geq 60 (
set /a th+=1
set /a tm-=60
)
|
Цитата:
Цитата 91892823
Но у меня почему-то он не совсем работает, выдает только "0:00:00".. Даже не знаю в чем причина.. »
|
Возможно в версии ОС и в ином именовании столбца (я раньше натыкался как-то на список свойств в разных ОС где-то на форуме KiXtart'а). Перетащите ту же папку на этот скрипт:
читать дальше »
Код:
Option Explicit
Const READYSTATE_COMPLETE = 4
Dim strSourceFolder
Dim objShell
Dim objFolder
Dim objFolderItem
Dim intDuration
Dim objSWbemObjectEx
Dim strContent
If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)
Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(strSourceFolder)
If Not objFolder Is Nothing Then
strContent = ""
For Each objSWbemObjectEx In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").InstancesOf("Win32_OperatingSystem")
strContent = strContent & objSWbemObjectEx.Caption & " " & objSWbemObjectEx.Version & vbCrLf & vbCrLf
Next
For intDuration = 0 To 86
strContent = strContent & CStr(intDuration) & vbTab & objFolder.GetDetailsOf(, intDuration) & vbCrLf
Next
With WScript.CreateObject("InternetExplorer.Application")
.Navigate("about:blank")
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
.document.parentWindow.clipboardData.setData "text", strContent
.Quit
End With
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]"
End If
Set objFolder = Nothing
Set objShell = Nothing
Else
WScript.Echo "Usage: " & WScript.ScriptName & " <Source folder>" & vbCrLf & _
"" & vbCrLf & _
"Or drag one folder into this script"
End If
WScript.Quit 0
Затем выложите полученное содержимое буфера обмена сюда.
|
Foreigner, премного благодарен! Все работает)
вдруг кому пригодится
читать дальше »
@echo off
setlocal enabledelayedexpansion
set "path=%path%;C:\M\"
pushd %1 || goto:eof
set "mediainfo=mediainfo --Inform=Audio;%%Duration/String3%%"
for %%i in (*.mp3) do (
for /f "tokens=1 delims=." %%j in (' !mediainfo! "%%i" ') do call:sum "%%j"
)
set "th=00%th%"
set "tm=00%tm%"
set "ts=00%ts%"
echo %th:~-2%:%tm:~-2%:%ts:~-2% | clip
popd
goto:eof
:sum
for /f "tokens=1-3 delims=:" %%i in (%1) do (
set /a h=1%%i-100
set /a m=1%%j-100
set /a s=1%%k-100
)
set /a th+=h
set /a tm+=m
set /a ts+=s
if %ts% geq 60 (
set /a tm+=1
set /a ts-=60
)
if %tm% geq 60 (
set /a th+=1
set /a tm-=60
)
|
Если надо именно 00:00:00, то можно слегка исправить вывод:
Код:
...
)
set "th=00%th%"
set "tm=00%tm%"
set "ts=00%ts%"
echo %th:~-2%:%tm:~-2%:%ts:~-2% | clip
popd
goto:eof
:sum
...
Нет
Код:
@echo off
setlocal enabledelayedexpansion
set "path=%path%;C:\M\Mediainfo"
pushd %1 || goto:eof
...
Где C:\M\Mediainfo каталог утилиты
|
Iska, что же, в моем случае способ Foreigner - идеален. Считаю тему закрытой. Еще раз спасибо всем за участие!
|
91892823, тогда ждём до утра.
|
91892823, попробовал (на том, что есть).
1. По поводу именования столбцов в новых ОС:
Код:
Microsoft Windows Server 2008 R2 Standard 6.1.7600
…
27 Продолжительность
…
2. Похоже, что с копированием в буфер обмена посредством объектов автоматизации «htmlfile», равно и «InternetExplorer.Application» (отваливалось по мере усиления безопасности в IE) в новых ОС придётся попрощаться. Для них потребуется либо задействовать тот же «clip.exe», либо посмотреть, как поведёт себя HTA.
|
Время: 09:13.
© OSzone.net 2001-