Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[Кнопка] Аналог многострочного bat файла
Goto page Previous  1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
MVV



Joined: 15 Oct 2009
Posts: 4815
Location: Ростов-Дон

Post (Separately) Posted: Mon Jun 04, 2012 16:00    Post subject: Reply with quote

Вроде так:
Code:
[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

_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1172
Location: Макеевка

Post (Separately) Posted: Mon Jun 04, 2012 16:53    Post subject: Reply with quote

MVV
Тут что-то позаковыристей надо. Я уже перепробовал много разных вариаций прежде чем писать на форуме.
В предложенном варианте не срабатывает даже вызов TCFS2 (даже если убрать всё что после &).
Насколько я понимаю, путь к самой первой команды (Hidcon.exe) в кавычки можно не брать, а вот всё остальное - расценивается как параметры и где-то кавычки или удвоения процентов нужны.

В вызове второй команды (после амперсанда) тоже не всё так просто.
Пробую просто открыть командную строку и запустить напрямую
Code:
"%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 кавычки).
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Mon Jun 04, 2012 18:09    Post subject: Reply with quote

LonerD
& понимает cmd, а не Тотал. Без вызова cmd.exe амперсанд ставить бестолку. Start первый же параметр в кавычках считает заголовком окна, попробуй start "" "%COMMANDER_PATH%...
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1172
Location: Макеевка

Post (Separately) Posted: Mon Jun 04, 2012 18:42    Post subject: Reply with quote

Вроде закавыка с кавычками решилась.

Вот так работает (без start и всё взять ещё в одни кавычки).
Code:
[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""


Однако вот так конкретная команда не работает:
Code:
[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) , то в Тотале откроется несколько диалогов архивации, а при их закрытии получается крах Тотала).
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4815
Location: Ростов-Дон

Post (Separately) Posted: Mon Jun 04, 2012 21:08    Post subject: Reply with quote

Да, точно, start же первый параметр в кавычках считает заголовком окна (хвала мелкомягким). И да, с амперсендом надо ещё в кавычки всё брать.

Quote:
Я так понимаю, что дело в TCFS2.
TCFS2 вызывает диалог архивации, а потом, похоже, переключается на окно Тотала, и Nircmd посылает свои команды уже не окну диалога архивации, а непосредственно окну самого Тотала, находящегося на заднем плане.

TCFS2 ничего никуда не переключает, делать ей больше нечего. Smile Попробуй те же яйца с TCMC.

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

Весело. Very Happy
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1172
Location: Макеевка

Post (Separately) Posted: Mon Jun 04, 2012 22:10    Post subject: Reply with quote

Quote:
Попробуй те же яйца с TCMC.

Действительно. И точно так же вызываются множественные окна, приводящие к краху Тотала.
Странно, почему Nircmd посылает команды не активному окошку архивации, а неактивному Тоталовскому окошку. Заодно обнаружил ограничение Nircmd на количество эмуляций клавиатурных нажатий. Но это уже выходит за пределы данной темы.

До выяснения причин остановился на упрощённом варианте на основе одной программы.
Code:
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}"
Back to top
View user's profile Send private message
taravasya



Joined: 27 Mar 2010
Posts: 38

Post (Separately) Posted: Fri Feb 22, 2013 12:31    Post subject: Reply with quote

Здравствуйте. Есть схожий вариант проблемы...
Кнопка №1
Code:
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
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Plugins\exe\photoshop\Start.exe
%P%S
%COMMANDER_PATH%\Multimedia\PSDrop.ico
Обработка заказов
%COMMANDER_PATH%\Plugins\exe\photoshop\

-1


Возможно ли как-то объединить эти две кнопки в одну? Что-бы действия указанные в ней, выполнились последовательно?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Feb 22, 2013 13:38    Post subject: Reply with quote

taravasya
С ожиданием отработки нужно править скрипт. Как он оказался в папке Plugins\vba для меня остаётся секретом. Что это за плагин такой "vba"?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
taravasya



Joined: 27 Mar 2010
Posts: 38

Post (Separately) Posted: Fri Feb 22, 2013 13:41    Post subject: Reply with quote

Flasher
Да я сам создал эту папку. Тотал настроен "портабельно". Всё что нужно распихал по папкам, что-бы не путаться.
Но это и не важно. Суть не в этом. Проблема в том, что у этих двух команд разные параметры. И даже файлы которые нужно обрабатывать внешними коммандами разные...
Возможно ли это как-то реализовать?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Feb 22, 2013 15:26    Post subject: Reply with quote

taravasya wrote:
Да я сам создал эту папку.
Plugins Scripts
taravasya wrote:
Возможно ли это как-то реализовать?
Возможно. Править скрипт.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
taravasya



Joined: 27 Mar 2010
Posts: 38

Post (Separately) Posted: Tue Feb 26, 2013 14:05    Post subject: Reply with quote

Quote:
Plugins ‡ Scripts

Ну это очевидно. *.exe, тоже вообщем то не плагины. Но я не захотел создавать лишних папок, и сложил всё "кастомное" в папку plugins.
Я в vbs не силён.. скрипт выполняемый из первой кнопки, мне сваяли здесь же(на этом форуме). Смогли бы Вы подсказать, что нужно добавить в скрипте?
Code:
'===============================================
' Замена текста в файле с помощью рег. выражений
'
' Параметры:
' {файл} {текст для поиска} {текст для замены}
'===============================================
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

Скрипт универсальный, для трёх разных кнопок. Его действие изменяется в зависимости от входных параметров.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Feb 26, 2013 14:17    Post subject: Reply with quote

taravasya wrote:
мне сваяли здесь же(на этом форуме)
И кто автор? На форуме этого скрипта нет. Может, автора и попросить?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
taravasya



Joined: 27 Mar 2010
Posts: 38

Post (Separately) Posted: Tue Feb 26, 2013 14:22    Post subject: Reply with quote

Тут сборная солянка. Часть скрипта от Batya, часть Ваша ))))). Возможно, что-то я ещё сам замудрил туда выбрав подходящую часть скрипта...

Добавлено спустя 6 минут:

Собственно, началось всё от сюда:
http://forum.wincmd.ru/viewtopic.php?p=61341
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10420
Location: Россия, Саратов

Post (Separately) Posted: Tue Feb 26, 2013 14:42    Post subject: Reply with quote

Тема перенесена из "Общих вопросов" в "Автоматизацию".
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Feb 26, 2013 15:09    Post subject: Reply with quote

taravasya
А Start.exe списки понимает или только перечисленные файлы в строке?
И не лучше пофайлово редактировать - запускать?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
Jump to:  
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