Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник, считывающий время .mp3 и копирующий его в бефет обмена.

Ответить
Настройки темы
CMD/BAT - [решено] Батник, считывающий время .mp3 и копирующий его в бефет обмена.

Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Необходим батник, который при запуске сканировал бы папку в которой он находится на mp3; вычислял их продолжительность, суммировал и скопировал их в буфет обмена в формате 00:00:00.

Отправлено: 21:09, 27-06-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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:
папку в которой он находится »
Это в корне неправильный подход.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:01, 27-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Потребуется консольный 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. Миллисекунды не считал
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:20, 27-06-2012 | #3


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Iska, спасибо. Но я ничего не смыслю в vbscript`ах, как им хоть пользоваться?

Foreigner, консольный mediainfo?
Простите за нубство..

Отправлено: 22:23, 27-06-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 91892823:
как им хоть пользоваться? »
Сохранить код приведённого скрипта в файл с расширением «.vbs» (можно посредством Блокнота, указав кодировку ANSI при сохранении). Перетащить потребную папку на скрипт.

Цитата 91892823:
консольный mediainfo? »
MediaInfo_CLI_0.7.58_Windows_i386.zip
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:54, 27-06-2012 | #5


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Iska, спасибо еще раз. Но у меня почему-то он не совсем работает, выдает только "0:00:00".. Даже не знаю в чем причина..
Foreigner, спасибо, ваш способ работает. Есть еще вопрос: что нужно исправить в батнике, чтобы консольная версия находилась в определенном месте, чтоб не копировать ее всюду?

Отправлено: 23:19, 27-06-2012 | #6


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата:
чтобы консольная версия находилась в определенном месте, чтоб не копировать ее всюду?
Либо поместить в каталог, находящийся в %PATH%
Код: Выделить весь код
set path
Либо в произвольный каталог, но прописать в батнике, например:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

set "path=%path%;C:\BIN\Mediainfo"

...
Где C:\BIN\Mediainfo каталог утилиты
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:44, 27-06-2012 | #7


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

)

Отправлено: 23:54, 27-06-2012 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата 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

Затем выложите полученное содержимое буфера обмена сюда.

Отправлено: 00:03, 28-06-2012 | #9


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


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:05, 28-06-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник, считывающий время .mp3 и копирующий его в бефет обмена.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] батник для создания папки с текущей датой + время aggressor_ Скриптовые языки администрирования Windows 23 08-02-2018 16:02
CMD/BAT - [решено] Нужен батник копирующий текущий ip в буфер обмена Absolutus11 Скриптовые языки администрирования Windows 2 23-04-2012 15:22
Flash накопитель копирующий данные на себя. Baiker Хочу все знать 5 01-04-2012 13:11
CMD/BAT - [решено] Батник копирующий из папок в сети файлы в одну Nenomernoj Скриптовые языки администрирования Windows 11 16-01-2012 18:23
[решено] Скрипт копирующий всю информацию из свойст ПК Centrinar AutoIt 2 19-04-2010 11:58




 
Переход