Страница 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) , то в Тотале откроется несколько диалогов архивации, а при их закрытии получается крах Тотала).
Весело. :D

Добавлено: Пн июн 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 списки понимает или только перечисленные файлы в строке?
И не лучше пофайлово редактировать - запускать?