Страница 2 из 3
Добавлено: Пн июн 04, 2012 16:00
MVV
Вроде так:
Код: Выделить всё
[em_TreeCopy_plugin]
cmd="%commander_path%\Plugins\exe\Hidcon.exe" cmd.exe /c start "%commander_path%\Plugins\exe\TCFS2\TCFS2.exe" /ef tcm(508) & "%commander_path%\Plugins\exe\NirCmd\NirCmd.exe" sendkeypress shift+tab shift+tab home down
menu=TreeCopy - copying files with full folder tree
Добавлено: Пн июн 04, 2012 16:53
LonerD
MVV
Тут что-то позаковыристей надо. Я уже перепробовал много разных вариаций прежде чем писать на форуме.
В предложенном варианте не срабатывает даже вызов TCFS2 (даже если убрать всё что после &).
Насколько я понимаю, путь к самой первой команды (Hidcon.exe) в кавычки можно не брать, а вот всё остальное - расценивается как параметры и где-то кавычки или удвоения процентов нужны.
В вызове второй команды (после амперсанда) тоже не всё так просто.
Пробую просто открыть командную строку и запустить напрямую
Код: Выделить всё
"%commander_path%\Plugins\exe\TCFS2\TCFS2.exe" /ef tcm(508) & "%commander_path%\Plugins\exe\NirCmd\NirCmd.exe" sendkeypress shift+tab shift+tab home down
Срабатывает только первая команда.
(Можно всё упростить, наделать кучу батников или вспомогательных команд на подобные двухярусные конструкциии, но хочется понять - как правильно записать именно в одну строку и где ставить censored кавычки).
Добавлено: Пн июн 04, 2012 18:09
Serge Yolkin
LonerD
& понимает cmd, а не Тотал. Без вызова cmd.exe амперсанд ставить бестолку. Start первый же параметр в кавычках считает заголовком окна, попробуй start "" "%COMMANDER_PATH%...
Добавлено: Пн июн 04, 2012 18:42
LonerD
Вроде закавыка с кавычками решилась.
Вот так работает (без start и всё взять ещё в одни кавычки).
Код: Выделить всё
[em_Hello]
cmd=%commander_path%\Plugins\exe\Hidcon.exe cmd.exe /c ""%commander_path%\Plugins\exe\Nircmd\Nircmd.exe" speak text "Hello" & "%commander_path%\Plugins\exe\Nircmd\Nircmd.exe" speak text "Word""
Однако вот так конкретная команда не работает:
Код: Выделить всё
[em_TreeCopy_plugin]
cmd=%commander_path%\Plugins\exe\Hidcon.exe cmd.exe /c ""%commander_path%\Plugins\exe\TCFS2\TCFS2.exe" /ef tcm(508) & "%commander_path%\Plugins\exe\Nircmd\Nircmd.exe" sendkeypress shift+tab shift+tab home down"
menu=TreeCopy - copying files with full folder tree
Я так понимаю, что дело в TCFS2.
TCFS2 вызывает диалог архивации, а потом, похоже, переключается на окно Тотала, и Nircmd посылает свои команды уже не окну диалога архивации, а непосредственно окну самого Тотала, находящегося на заднем плане.
(забавный момент - если вызвать консоль и ввести в ней несколько раз TCFS2.exe /ef tcm(508) , то в Тотале откроется несколько диалогов архивации, а при их закрытии получается крах Тотала).
Добавлено: Пн июн 04, 2012 21:08
MVV
Да, точно, start же первый параметр в кавычках считает заголовком окна (хвала мелкомягким). И да, с амперсендом надо ещё в кавычки всё брать.
Я так понимаю, что дело в TCFS2.
TCFS2 вызывает диалог архивации, а потом, похоже, переключается на окно Тотала, и Nircmd посылает свои команды уже не окну диалога архивации, а непосредственно окну самого Тотала, находящегося на заднем плане.
TCFS2 ничего никуда не переключает, делать ей больше нечего.

Попробуй те же яйца с TCMC.
(забавный момент - если вызвать консоль и ввести в ней несколько раз TCFS2.exe /ef tcm(508) , то в Тотале откроется несколько диалогов архивации, а при их закрытии получается крах Тотала).
Весело.

Добавлено: Пн июн 04, 2012 22:10
LonerD
Попробуй те же яйца с TCMC.
Действительно. И точно так же вызываются множественные окна, приводящие к краху Тотала.
Странно, почему Nircmd посылает команды не активному окошку архивации, а неактивному Тоталовскому окошку. Заодно обнаружил ограничение Nircmd на количество эмуляций клавиатурных нажатий. Но это уже выходит за пределы данной темы.
До выяснения причин остановился на упрощённом варианте на основе одной программы.
Код: Выделить всё
cmd=%commander_path%\Plugins\exe\Nircmd\Nircmd.exe sendkeypress alt+f5 shift+tab shift+tab home down enter
cmd=%commander_path%\Plugins\exe\TCMC\TCMCWindow.exe "ttcmc=CMcm_PackFiles" "pause=20" "keybd={TAB}" "keybd={-}" "keybd={TAB}" "keybd={HOME}" "keybd={DOWN}" "keybd={ENTER}"
Добавлено: Пт фев 22, 2013 12:31
taravasya
Здравствуйте. Есть схожий вариант проблемы...
Кнопка №1
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\vba\pr_done.vbs
"%p%n\process.xml" "<code>\d+</code>" "<code>200</code>" "%L" "%Pdescript.ion" "В_ОБР" ""
%COMMANDER_PATH%\Multimedia\Revolution Icon 28.ico
Обрабатывается
%COMMANDER_PATH%\Plugins\cmd\
0
-1
Кнопка №2
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\exe\photoshop\Start.exe
%P%S
%COMMANDER_PATH%\Multimedia\PSDrop.ico
Обработка заказов
%COMMANDER_PATH%\Plugins\exe\photoshop\
-1
Возможно ли как-то объединить эти две кнопки в одну? Что-бы действия указанные в ней, выполнились последовательно?
Добавлено: Пт фев 22, 2013 13:38
Flasher
taravasya
С ожиданием отработки нужно править скрипт. Как он оказался в папке Plugins\vba для меня остаётся секретом. Что это за плагин такой "vba"?
Добавлено: Пт фев 22, 2013 13:41
taravasya
Flasher
Да я сам создал эту папку. Тотал настроен "портабельно". Всё что нужно распихал по папкам, что-бы не путаться.
Но это и не важно. Суть не в этом. Проблема в том, что у этих двух команд разные параметры. И даже файлы которые нужно обрабатывать внешними коммандами разные...
Возможно ли это как-то реализовать?
Добавлено: Пт фев 22, 2013 15:26
Flasher
taravasya писал(а):Да я сам создал эту папку.
Plugins
‡ Scripts
taravasya писал(а):Возможно ли это как-то реализовать?
Возможно. Править скрипт.
Добавлено: Вт фев 26, 2013 14:05
taravasya
Plugins ‡ Scripts
Ну это очевидно. *.exe, тоже вообщем то не плагины. Но я не захотел создавать лишних папок, и сложил всё "кастомное" в папку plugins.
Я в vbs не силён.. скрипт выполняемый из первой кнопки, мне сваяли здесь же(на этом форуме). Смогли бы Вы подсказать, что нужно добавить в скрипте?
Код: Выделить всё
'===============================================
' Замена текста в файле с помощью рег. выражений
'
' Параметры:
' {файл} {текст для поиска} {текст для замены}
'===============================================
Option Explicit
Dim FSO, F, Str1, Str2, Text
Set FSO = CreateObject("Scripting.FileSystemObject")
With WScript
F = .Arguments(0)
Str1 = .Arguments(1)
Str2 = .Arguments(2)
End With
F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F))
Text = FSO.OpenTextFile(F, 1).ReadAll
Text = RegExpReplace(Text, Str1, Str2)
FSO.OpenTextFile(F, 2).Write Text
Set FSO = Nothing
Dim FSOT, oTextFile, AllText, OTF, FileName, CommFile, CommLabel, CommLabelDel, BegFile, BegFileComm
Set FSOT = CreateObject("Scripting.FileSystemObject")
Set OTF = FSOT.OpenTextFile(WScript.Arguments(3), 1)
CommFile = WScript.Arguments(4)
CommLabel = WScript.Arguments(5)
CommLabelDel = WScript.Arguments(6)
AllText = ""
If FSOT.FileExists(CommFile) Then
Set oTextFile = FSOT.OpenTextFile(CommFile, 1)
On Error Resume Next 'Игнорируем ошибку, если файл пустой
AllText = oTextFile.ReadAll
On Error GoTo 0
oTextFile.Close
End If
Do While Not OTF.AtEndOfStream
FileName = OTF.ReadLine
If FSOT.FileExists(FileName) Then
FileName = FSOT.GetFile(FileName).Name
Else
FileName = FSOT.GetFolder(FileName).Name
End If
If InStr(1, FileName, " ", 1) > 0 Then
FileName = """" & FileName & """"
End If
BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
If BegFile > 0 Then
BegFileComm = BegFile + Len(FileName) + 1
If InStr(1, Mid(AllText, BegFileComm, Len(CommLabelDel)), CommLabelDel, 1) > 0 Then
AllText = Left(AllText, BegFileComm - 1) & Mid(AllText, BegFileComm + Len(CommLabelDel))
'Удаление лишних пробелов
If Instr(BegFile, AllText, FileName & " ", 1) > 0 Then
AllText = Left(AllText, BegFileComm - 2) & Mid(AllText, BegFileComm)
End If
'Удаление пустых комментариев
If Instr(BegFile, AllText & vbNewLine, FileName & " " & vbNewLine) > 0 Then
AllText = Left(AllText, BegFile - 1) & Mid(AllText, BegFile + Len(FileName & " " & vbNewLine))
End If
'Удаление лишних концевых строк
If Right(AllText, Len(vbNewLine)) = vbNewLine Then
AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
End If
Set oTextFile = FSOT.OpenTextFile(CommFile, 2)
oTextFile.Write AllText
oTextFile.Close
End If
End If
Loop
Set FSOT = CreateObject("Scripting.FileSystemObject")
Set OTF = FSOT.OpenTextFile(WScript.Arguments(3), 1)
CommFile = WScript.Arguments(4)
CommLabel = WScript.Arguments(5)
CommLabelDel = WScript.Arguments(6)
Do While Not OTF.AtEndOfStream
FileName = OTF.ReadLine
If FSOT.FileExists(FileName) Then
FileName = FSOT.GetFile(FileName).Name
Else
FileName = FSOT.GetFolder(FileName).Name
End If
If InStr(1, FileName, " ", 1) > 0 Then
FileName = """" & FileName & """"
End If
BegFile = InStr(1, vbNewLine & AllText, vbNewLine & FileName & " ", 1)
If BegFile > 0 Then
BegFileComm = BegFile + Len(FileName) + 1
If InStr(1, Mid(AllText, BegFileComm, Len(CommLabel)), CommLabel, 1) = 0 Then
AllText = Left(AllText, BegFileComm - 1) & CommLabel & " " & Mid(AllText, BegFileComm)
Set oTextFile = FSOT.OpenTextFile(CommFile, 2)
oTextFile.Write AllText
oTextFile.Close
End If
Else
Set oTextFile = FSOT.OpenTextFile(CommFile, 8, 2)
If Right(AllText, Len(vbNewLine)) <> vbNewLine Then
oTextFile.WriteLine
AllText = AllText & vbNewLine
End If
oTextFile.Write FileName & " " & CommLabel
oTextFile.Close
AllText = AllText & FileName & " " & CommLabel
End If
Loop
OTF.Close
Set oTextFile = Nothing
Set OTF = Nothing
Set FSOT = Nothing
WScript.Quit 0
'Функция замены с помощью регулярных выражений
Function RegExpReplace(pText, pFindStr, pNewStr)
Dim regEx
Set regEx = New RegExp
regEx.Pattern = pFindStr
regEx.IgnoreCase = True
regEx.Global = True
RegExpReplace = regEx.Replace(pText, pNewStr)
Set regEx = Nothing
End Function
Скрипт универсальный, для трёх разных кнопок. Его действие изменяется в зависимости от входных параметров.
Добавлено: Вт фев 26, 2013 14:17
Flasher
taravasya писал(а):мне сваяли здесь же(на этом форуме)
И кто автор? На форуме этого скрипта нет. Может, автора и попросить?
Добавлено: Вт фев 26, 2013 14:28
taravasya
Тут сборная солянка. Часть скрипта от Batya, часть Ваша ))))). Возможно, что-то я ещё сам замудрил туда выбрав подходящую часть скрипта...
Добавлено спустя 6 минут:
Собственно, началось всё от сюда:
http://forum.wincmd.ru/viewtopic.php?p=61341
Добавлено: Вт фев 26, 2013 14:42
Avada
Тема перенесена из "Общих вопросов" в "Автоматизацию".
Добавлено: Вт фев 26, 2013 15:09
Flasher
taravasya
А Start.exe списки понимает или только перечисленные файлы в строке?
И не лучше пофайлово редактировать - запускать?