View previous topic :: View next topic |
Author |
Message |
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Thu Oct 30, 2014 22:01 Post subject: |
|
|
Спасиб, поробую, просто об этом нигде не написано. Кроме тебя на этом форуме все вымерли
Добавлено спустя 6 минут:
Кстати, че то с "%T" не удается использовать. В винраре только. А вот например с этим
TOTALCMD#BAR#DATA
"c:\Program Files\Total Commander\Utils\WHS\MultiRun.vbs"
01 "%%COMMANDER_PATH%%\Plugins\exe\balabolka\lame.exe" {{%WL}} --priority -b 64 -h --tt "{{%WL}}.mp3
%COMMANDER_PATH%\Plugins\exe\balabolka\lame.exe
Convert all wav to mp3
1
-1
Пробовал вышеуказанный параметр c {{%WL}}- игнорит напрочь, даже ошибки нет, все в той же панели все творит |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Oct 30, 2014 22:35 Post subject: |
|
|
Dimsok wrote: | "{{%WL}}" --priority -b 64 -h --tt "{{%WL}}.mp3" |
Dimsok wrote: | Кроме тебя на этом форуме все вымерли | На подфоруме. Не все знают что ответить либо не успевают, когда могут. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Thu Oct 30, 2014 22:54 Post subject: |
|
|
Ну я конкретно не про ответ, а вообще, про активность. Вернее, про её отсутсвие |
|
Back to top |
|
|
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Fri Oct 31, 2014 13:29 Post subject: |
|
|
Не пойму, что не так
-i "{{%WL}}" -o "%t{{%WF}}.divx"
Работает только с именами файлов без пробелов. В текущей панели нормально без пробелов работает. Если только вместо F не подставить f, но тогда имена файлов на выходе каверкаются.
И вообще я так понял, что кавычки с {{ не обязательны. Если с пробелами работает, так и без них нормально, если нет, то все равно не помогают
И как бы организовать удаление исходников. Что то типа && del /f /q "{{%WL}}"" не помогает |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Oct 31, 2014 18:39 Post subject: |
|
|
Dimsok wrote: | -i "{{%WL}}" -o "%t{{%WF}}.divx" | А почему %t, а не %T? Dimsok wrote: | И как бы организовать удаление исходников. | Не хочу чужой код ковырять, пусть Batya сам при желании добавит опцию. Dimsok wrote: | Что то типа && del /f /q "{{%WL}}"" не помогает | И не поможет, это не cmd. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Fri Oct 31, 2014 18:54 Post subject: |
|
|
С %T пробовал, но пути с пробелами не видит
Имена файлов без расширений тоже никак нельзя сделать? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Oct 31, 2014 19:44 Post subject: |
|
|
Нужно модифицировать код в любом случае. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri Nov 14, 2014 13:18 Post subject: |
|
|
Dimsok
Что-то вы тут с Flasher накрутили...
Вообщем, поменяй для теста в скрипте Code: | 'Тестовая строка - раскомментарить для проверки
'MsgBox L, vbOKOnly, Mess(5)
WSH.Run L, 7, (Mode(1) = 0) | на Code: | 'Тестовая строка - раскомментарить для проверки
MsgBox L, vbOKOnly, Mess(5)
'WSH.Run L, 7, (Mode(1) = 0) |
Играй параметрами и смотри, что в итоге у тебя хочет запускаться. По результатам экспериментов, если у самого ничего путного не выйдет, обращайся.
Dimsok wrote: | И как бы организовать удаление исходников. Что то типа && del /f /q "{{%WL}}"" не помогает |
Как верно заметил Flasher, это не cmd. Но, как раз, запуск cmd может помочь - попробуй в параметрах вызывать не "01 "%%COMMANDER_PATH%%\Plugins\exe\balabolka\lame.exe" ...", а "01 cmd "%%COMMANDER_PATH%%\Plugins\exe\balabolka\lame.exe" ...". А потом уже "&& del ...".
Кстати, можно посмотреть пример использования с удалением здесь.
P.S. На форуме бываю редко, т.ч. быстрый ответ не обещаю. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Nov 14, 2014 18:19 Post subject: |
|
|
Batya wrote: | Что-то вы тут с Flasher накрутили... | Да я ничего тут не крутил.
Batya wrote: | Но, как раз, запуск cmd может помочь | А с этим-то он как поможет?: Dimsok wrote: | Имена файлов без расширений | Такое прокатит?: "%%~n{{%WF}}.mp3" _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Sat Nov 15, 2014 10:42 Post subject: |
|
|
Flasher wrote: | А с этим-то он как поможет?: |
А вот для этого я и писал: Batya wrote: | Вообщем, поменяй для теста в скрипте
...
Играй параметрами и смотри, что в итоге у тебя хочет запускаться. |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Sat Nov 15, 2014 17:17 Post subject: |
|
|
Batya wrote: |
Вообщем, поменяй для теста в скрипте Code: | 'Тестовая строка - раскомментарить для проверки
'MsgBox L, vbOKOnly, Mess(5)
WSH.Run L, 7, (Mode(1) = 0) | на Code: | 'Тестовая строка - раскомментарить для проверки
MsgBox L, vbOKOnly, Mess(5)
'WSH.Run L, 7, (Mode(1) = 0) |
|
Чего-то я не вижу разницы. И для какой это цели? Это должно помочь читать имен файлов без расширений?
Добавлено спустя 3 минуты:
Аа, понял, поменять ' местами. А что это должно изменить? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 15, 2014 18:22 Post subject: |
|
|
Dimsok wrote: | А что это должно изменить? | Написано же - для проверки. Покажет запись комстроки. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Victor_Dobrov
Joined: 15 Jul 2008 Posts: 50
|
(Separately) Posted: Wed Apr 13, 2016 04:08 Post subject: |
|
|
Небольшая доработка, можно не указывать режим, и можно задать число одновременно выполняемых задач (по числу ядер процессора)
Hidden text Code: | '=======================================================================================
' Выполнение указанной команды (программы) для каждого элемента файла-списка
' Параметры скрипта:
' [1] - Набор режимов, где каждый режим определяется цифрами по разрядам:
' 1 - обрабатывать каждый список отдельно (0 - умолч.) или синхронно (1),
' 2 - последовательное (0 - умолч.) или параллельное (по числу ядер) выполнение команд по списку
' 2 и далее - Выполняемая команда (программа) и параметры к ней
' Начало и конец файла-списка определяется заданными ниже символами (набором символов).
' Команда выполняется для каждого элемента списка, подстановкой этого элемента в местоположение списка.
' В качестве параметра может быть указано текстовое содержимое буфера обмена.
' Тэг буфера обмена задается в секции скрипта "Изменяемые параметры".
' Для использования буфера обмена в системе должен быть установлен TCScript.Helper.
' Например, параметры вызова из TC для одновременного фонового извлечения из архивов,
' пароль к которым находится в буфере обмена, в текущую папку:
' 10 "%ProgramFiles%\WinRar\WinRar.Exe" X -ibck -p### "%P{{%L}}" "%P"
'
' Автор - Batya
' Версия - 1.2
' + Dobrov: можно не писать режим, по-умолчанию 14 (синхронно, 4 задачи максимум)
'======================================================================
Option Explicit
'================= Изменяемые параметры ================================================
Const ListBegin = "{{" 'Начало списка
Const ListEnd = "}}" 'Конец списка
Const ClipboardTag = "###" 'Тэг буфера обмена
'=======================================================================================
Dim FSO, WSH, Mess, Mode(1), Command, i, L, P, LenListBegin, LenListEnd, Clipboard, Hint, L1, L1s, R, C, m, z
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
R = "14" 'режим по-умолчанию: каждый список синхронно, 4 задачи одновременно
'Задаем массив сообщений
MessDefine : LenListBegin = Len(ListBegin) : LenListEnd = Len(ListEnd)
'Проверяем параметры
CheckParams
'Выполняем команды по списку
For Each L In SearchList(Command, 0)
C = C +1 'счётчик активных задач
WSH.Run L, 7, (C >= CInt(Mode(1)))
' MsgBox L, vbOKOnly, (C >= CInt(Mode(1))) 'Тестовая строка - раскомментарить для проверки
if C >= CInt(Mode(1)) then C = 0
Next
Quit 'Выход
'===== Процедуры и функции =============================================================
'Проверка входных параметров
Sub CheckParams
Dim k, lP, n, F
With WScript
If .Arguments.Count < 1 Then
MsgBox Mess(2), vbCritical + vbOKOnly, Mess(0)
Quit
End If
F = IsNumeric(.Arguments(0)) and (.Arguments.Count > 1)
If F then m = .Arguments(0)
m = m & Right(R, Len(R) - Len(m))
For i = Abs(F) To .Arguments.Count - 1
lP = WSH.ExpandEnvironmentStrings(.Arguments(i))
If InStr(lP, " ") > 0 Then lP = """" & lP & """"
Command = Command & " " & lP
Next
Command = Mid(Command, 2)
End With
n = UBound(Mode) + 1
For i = 0 To n - 1
k = Mid(m, i + 1, 1) 'Берем очередной разряд
Mode(i) = k
Next
End Sub
'Поиск в строке тэгов файлов-списков и формирование массива элементов
Function SearchList(pStr, byVal pDepth)
Dim lList, lL, lPos1, lPos2, lStr, lBegin, lEnd, lList1, lL1, lList2, k, m
If UCase(ListBegin) = UCase(ListEnd) Then
'Ищем начало списка
lPos1 = InStr(1, pStr, ListBegin, vbTextCompare)
If lPos1 = 0 Then
SearchList = Array(SearchClipboard(pStr))
Exit Function
End If
'Ищем конец списка
lPos2 = InStr(lPos1 + LenListBegin, pStr, ListEnd, vbTextCompare)
If lPos2 = 0 Then
SearchList = Array(SearchClipboard(pStr))
Exit Function
End If
Else
'Ищем конец списка
lPos2 = InStr(1, pStr, ListEnd, vbTextCompare)
If lPos2 = 0 Then
SearchList = Array(SearchClipboard(pStr))
Exit Function
End If
'Ищем начало списка
lPos1 = InStrRev(pStr, ListBegin, lPos2 - 1, vbTextCompare)
If lPos1 = 0 Then
SearchList = Array(SearchClipboard(pStr))
Exit Function
End If
End If
'Файл-список
lList = Mid(pStr, lPos1 + LenListBegin, lPos2 - lPos1 - LenListBegin)
'Если файла-списка не существует, выходим
If Not FSO.FileExists(lList) Then
MsgBox Mess(3) & " """ & lList & """ " & Mess(4),_
vbCritical + vbOKOnly, Mess(0)
Quit
End If
'Начало и конец командной строки
lBegin = Left(pStr, lPos1 - 1)
lEnd = Mid(pStr, lPos2 + LenListBegin)
'Перебираем список
lList2 = Split(FSO.OpenTextFile(lList, 1, False, -2).ReadAll, vbNewLine)
m = pDepth
If pDepth = 0 Then
pDepth = UBound(lList2)
m = 0
End If
For k = m To pDepth
lL = lList2(k)
If lL = "" Then Exit For
lL = WSH.ExpandEnvironmentStrings(lL)
If InStr(lL, " ") > 0 Then lL = """" & lL & """"
'Формируем выходной список в зависимости от режима
Select Case Mode(0)
Case 0
'Рекурсивный поиск списка
lList1 = SearchList(lBegin & lL & lEnd, 0)
For Each lL1 In lList1
lStr = lStr & vbNewLine & lL1
Next
Case 1
'Рекурсивный поиск списка
lList1 = SearchList(lBegin & lL & lEnd, k)
lStr = lStr & vbNewLine & lList1(0)
End Select
Next
SearchList = Split(SearchClipboard(Mid(lStr, Len(vbNewLine) + 1)), vbNewLine)
End Function
'Подстановка текстового значения из буфера обмена
Function SearchClipboard(pStr)
If UBound(Filter(Array(pStr), ClipboardTag)) >= 0 Then
SearchClipboard = Replace(pStr, ClipboardTag, GetClipboard)
Else
SearchClipboard = pStr
End If
End Function
'Содержимое буфера обмена
Function GetClipboard()
If IsEmpty(Clipboard) Then
GetClipboard = CreateObject("TCScript.Helper").GetTextFromClip
Else
GetClipboard = Clipboard
End If
End Function
'Описание сообщений
Sub MessDefine
Set Mess = CreateObject("Scripting.Dictionary")
With Mess
.Add 0, "Выполнение программы для списка"
.Add 1, "Не указаны параметры!"
.Add 2, "Не указана выполняемая команда!"
.Add 3, "Файл-список"
.Add 4, "не существует!"
.Add 5, "Тест командной строки"
End With
End Sub
'Выход
Sub Quit
Set Mess = Nothing
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit
End Sub
|
|
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10271 Location: Россия, Саратов
|
(Separately) Posted: Wed Apr 13, 2016 08:05 Post subject: |
|
|
Victor_Dobrov
Для скриптов такого размера на форуме лучше применять спойлеры! Исправлено. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
helb
Joined: 08 Oct 2014 Posts: 57
|
(Separately) Posted: Tue Nov 22, 2016 16:29 Post subject: |
|
|
Вариация на powershell. Поддерживает regex и параллельное выполнение. Главный плюс, дает манипулировать входными данными (простейшее, использовать входное имя файла в качестве выходного). В сущности лист может представлять собой любые однотипные строки на манер CSV.
Code: | <# MultiRun [by helb] v2016-11-05
Launches specified command for every item in a list (file paths or any arbitrary data in lines). Supports RegEx.
Command line usage: powershell <this script pathname> <listfile> [-re '<regex with capture groups>'] [-threads <number>] <command with parameters>
Captured groups should be represented in command with number after ‘:::’ signs (e.g. ‘:::2’)
Any ‘"’ characters inside command arguments should be escaped with ‘\"’, arguments containing ‘$’ single quoted (with apostrophes) and ‘&’ enclosed like '"<text with &>"' (e.g. '"-arg=\"weird&unu$ual\""')
Total Commander file list parameter: %UL
Запускает указанную команду для каждой записи в списке (пути файлов или любые произвольные данные строками). Поддерживает RegEx.
Использование: powershell <путь скрипта> <лист-файл> [-re '<regex включая capture-группы>'] [-threads <число>] <команда с параметрами>
Захваченные группы из регулярного выражения должны быть представлены в команде в виде «:::номер» (например «:::2»)
Любые символы «"» внутри аргументов команды требуется представить в виде «\"», аргументы содержащие «$» заключить в апострофы, «&» — заключить '"подобным образом"' (например: '"-arg=\"weird&unu$ual\""')
Параметр в Total Commander для списка файлов: %UL
Example, mux youtube video in separate video (.mp4) and audio (.m4a) dash-files into normal mp4 container:
powershell MultiRun.ps1 video-only-files-list.txt -threads 4 -re '(.+)\.mp4$' ffmpeg -i ":::0" -i ":::1.m4a" -c copy -map 0:v:0 -map 1:a:0 ":::1~.mp4"
#>
Param
(
[parameter(Position=0, Mandatory=$true)][string]$list,
[string]$re,
[int]$threads,
[parameter(ValueFromRemainingArguments=$true)][string[]]$arguments
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
function msgBx($text, $title, $btns = 0) {
return [System.Windows.Forms.MessageBox]::Show($text, $title, $btns)
}
if (!$list) { msgBx "No list specified." "Error"; return }
if (!$threads -or $threads -lt 1) {$threads = 1}
$list = [environment]::ExpandEnvironmentVariables($list)
if (!(test-path -literalPath $list)) { msgBx "List file not found." "Warning"; return }
$i = 0
foreach ($a in $arguments) {
if (($a -match '\s' -and $a -notmatch '^".+"$') -or $a -match ':::\d') {
$arguments[$i] = '"' + $a + '"'
}
$i++
}
$arguments
[string]$clinebase = $arguments[1..($arguments.length-1)] -join ' '
$clinebase
$jobs = @()
for ($i = 0; $i -lt $threads; $i++) {
$jobs += $null
}
get-content $list | foreach {
$cline = $clinebase -replace ':::0', $_
if ($re -and $_ -match $re) {
for ($i = 1; $i -lt $matches.count; $i++){
$cline = $cline.replace(':::' + $i, $matches[$i])
}
}
$cline
do {
$launched = $false
for ($i = 0; $i -lt $threads; $i++) {
if ($jobs[$i] -eq $null -or $jobs[$i].HasExited) {
$jobs[$i] = Start-Process $arguments[0] -PassThru -ArgumentList $cline
$launched = $true
break
}
}
if (!$launched) { Start-Sleep -m 100 }
} until ($launched)
}
|
|
|
Back to top |
|
|
|
|
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
|