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 

Как войти в папку из скрипта в Тотал Коммандер?

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Wed Aug 30, 2023 13:17    Post subject: Как войти в папку из скрипта в Тотал Коммандер? Reply with quote

Доброго времени суток! Пишу небольшой скрипт для Тотал Коммандера. Скрипт должен просто создавать определенную папку в текущем каталоге и входить в нее. Вроде все сделал, но открытие создаваемой папки происходит в проводнике, а нужно остаться в Тотал Коммандере. Подскажите, пожалуйста, как это сделать (создать папку и сразу войти в нее)? Вот что у меня есть на данный момент:
Code:

function setParams(){
  FSO = new ActiveXObject("Scripting.FileSystemObject");
 }
 
 function newFolder(){
  var newFolderName, newFolderName_n, counter, folderCreated;
  newFolderName = "TEST";
  newFolderName_n = "TEST";
  counter = 0;
  folderCreated = false;
  while (! folderCreated){
    if (FSO.FolderExists(newFolderName)) {
     counter++
     newFolderName = newFolderName_n+"("+counter+")";
    }
    else {
     FSO.CreateFolder(newFolderName);
     folderCreated = true;
     var test = new ActiveXObject("WScript.shell");
     test.run(newFolderName, 1, false); // открывает в проводнике
    }
  }
 }

 setParams();
 newFolder();
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Aug 30, 2023 14:14    Post subject: Reply with quote

keramer82
Делюсь своим скриптом VBS для расширенного создания папок, делал сугубо для своих нужд. Можете или пользоваться им, или просто подсмотреть решение:
Code:
' Расширенное создание папок
' Параметры "%P" (в кавычках)

' ============================
' Изменяемые в VBS параметры:
  DelTire = 1 ' удаление " - " (пробел тире пробел) в конце имен папок, 0 - нет, 1 - да
' ============================

On Error Resume Next
set FSO = createobject ("Scripting.FileSystemObject")
DateNow = Year(Date) & "." & Right(0 & Month(Date), 2) & "." & Right(0 & Day(Date), 2) & " - "
Fld = Inputbox("Введите имя папки" & vbnewline & vbnewline & "   * (звездочка) - создание папок по списку из буфера обмена" & vbnewline & "   ** (две звездочки) - то же, но с сохранением порядка", "Расширенное создание папок", DateNow)
if IsEmpty(Fld) then Wscript.Quit

' ===== Обработка буфера обмена
if Fld="*" Or Fld="**" then
  If Fld="**" then num = 1 else num = 0
  Fld = CreateObject("HTMLFile").parentWindow.clipboardData.getData("Text")
  CrLfArr = Array(vbnewline, chr(13), chr(10), "||")
  For Each a In CrLfArr
    Fld = replace(Fld, a, "|")
  Next
  Fld = replace(Fld, Chr(9) & "|", "|")
  Fld = replace(Fld, Chr(9), " - ")
  Fld = replace(Fld, """", "")
End If

' ===== замена запрещенных символов
Sym = "/\*?"":<>"
For i = 1 To Len(Sym)
  Fld = Replace(Fld, Mid(Sym, i, 1), "_")
Next
For i=1 to 100
  Fld = replace(Fld, "  ", " ")
  Fld = replace(Fld, "- -", "-")
Next
Fld = replace(Fld, " - |", "|")

' ===== Основная обработка создания папок
For Each FldName In Split(Fld, "|")
  QuantityFlds = QuantityFlds + 1 ' общий счет количества создаваемых папок
  If num = 1 then
    k = k + 1
    number = right("000" & k, 4) & ". "
  End If
  Err.Number = 0
  if right(FldName, 3) = " - " and DelTire = 1 then FldName=left(FldName, len(FldName) - 3)
  FullpathNewFolder = WScript.Arguments(0) & number & Trim(FldName)
  If FldName <> "" then FSO.CreateFolder FullpathNewFolder
  If Err.Number <> 0 then ErrText = ErrText & vbnewline & "•  " & number & Trim(FldName)
Next

' ===== сообщение об ошибке при создании папок
If ErrText <> "" then
  msgbox "Ошибка создания папок, возможны следующие причины:" & vbnewline & "  1) Папки уже существуют" _
    & vbnewline & "  2) Вы пытаетесь создать папки с одинаковыми именами" & vbnewline _
    & "  3) Превышение максимальной длины пути" & vbnewline & ErrText
  Wscript.Quit
end if

' ===== если созданная папка ОДНА, то автоматический вход в нее в ТС
If QuantityFlds = 1 then 
  Set WshShell = CreateObject("WScript.Shell")
  TCP = WshShell.ExpandEnvironmentStrings("%commander_path%")
  WshShell.run """" & TCP & "\TOTALCMD.EXE"" /O /S """ & FullpathNewFolder & """"
End If
Back to top
View user's profile Send private message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Wed Aug 30, 2023 14:50    Post subject: Reply with quote

Monarch-LFV, спасибо. Только это мой первый скрипт для тотала. Боюсь я не могу разобраться, тем более в VBA.
Интуитивно понимаю, что нужно как-то ковертнуть вот эти строки в jv
Code:

Set WshShell = CreateObject("WScript.Shell")
  TCP = WshShell.ExpandEnvironmentStrings("%commander_path%")
  WshShell.run """" & TCP & "\TOTALCMD.EXE"" /O /S """ & FullpathNewFolder & """"

но моих невеликих познаний на это не хватает.
Ваш скрипт попробовал, он у меня в папку создаваемую не входит. Ну и для моих задач он слишком большой что ли. Мне нужно просто создавать папку "TEST" по нажатию горячей клавиши.
И как запускать с параметрами я пока не разобрался...
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Aug 30, 2023 15:04    Post subject: Reply with quote

keramer82
Создайте файл "Create_New_Folder_Extended.vbs" с содержимым, которое я написал выше. Данный файл перетащите на панель кнопок ТС, создастся кнопка. Далее нажмите "Изменить" в контекстном меню данной кнопки и в параметрах пропишите (вместе с кавычками): "%P"
Back to top
View user's profile Send private message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Wed Aug 30, 2023 15:13    Post subject: Reply with quote

Monarch-LFV, папка то создается. Кнопка срабатывает, выводится окно с просьбой ввести что-то, (что именно, не понятно, описание кракозябрами), но дата сегодняшняя уже стоит. Кликаю "ок", папка создается, в названии - то, что предлагалось ввести (дата). Но в созданную папку Тотал не заходит..
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Aug 30, 2023 15:28    Post subject: Reply with quote

keramer82
Кодировку файла VBS поменяйте на CP-1251.
Back to top
View user's profile Send private message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Wed Aug 30, 2023 15:38    Post subject: Reply with quote

Теперь понятен стал текст про звездочки. Но в создаваемую папку все равно не входит. Просто создает и все.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Aug 30, 2023 15:46    Post subject: Reply with quote

keramer82
Какое вы вводите имя создаваемой папки? Верно ли скопировали текст скрипта? Верно ли задали параметры? В какой папке пытаетесь создать папку?

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

keramer82 wrote:
Мне нужно просто создавать папку "TEST" по нажатию горячей клавиши.

Сокращенный скрипт для ваших нужд:
Code:
' Создать папку TEST и войти в нее
' Параметры "%P" (в кавычках)

On Error Resume Next
NewFolder="TEST"
FullpathNewFolder=WScript.Arguments(0) & "\" & NewFolder
set FSO = createobject ("Scripting.FileSystemObject")
FSO.CreateFolder FullpathNewFolder
Set WshShell = CreateObject("WScript.Shell")
TCP = WshShell.ExpandEnvironmentStrings("%commander_path%")
WshShell.run """" & TCP & "\TOTALCMD.EXE"" /O /S """ & FullpathNewFolder & """"
Back to top
View user's profile Send private message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Wed Aug 30, 2023 16:07    Post subject: Reply with quote

Пробовал вводить разные имена создаваемой папке. И на русском, и на латинице, и цифры. И просто кликал "ок". Текст скрипта скопировал, вставил, сохранил еще раз. Параметры буквально поставил – "%P" вместе с кавычками. Создавать папку пробовал в корне диска С. Пробовал во вложенных папках, например c:\Total Scripts\
Результат один и тот же — папка просто создается и все. Тотал внутрь этой папки, как бы она не называлась, и где бы не находилась, не заходит.
Тотал 10.00. Запрета на открытие второго Тотала нет.
Попробовал на другой машине, Тотал 8.01 — в создаваемую папку заходит! НО открывает второй Тотал Коммандер, что совсем не подходит. А остаться в том же Тотале, в котором создается папка можно? Может параметр какой-то еще прописать нужно...
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Aug 30, 2023 16:16    Post subject: Reply with quote

keramer82
Не знаю почему у вас не работает. Собственно, параметры /O /S - как раз и определяют действия ТС.
Читайте справку ТС полностью. Приведу только выдержки оттуда по этим ключам:
/O - Если Total Commander уже запущен, этот параметр активизирует его и передаёт путь (пути) из командной строки в эту копию программы (независимо от настройки в диалоге конфигурации, позволяющей открывать несколько окон Total Commander).
/S - Воспринимает переданные каталоги как исходный/целевой вместо левого/правого (для совместного применения с параметром /O). Например, каталог, переданный с ключом /R= будет воспринят как каталог назначения.
Попробуйте разобраться самостоятельно, так как у меня эти скрипты работают, как заявлено.
Для начала попробуйте отключить пропуск ошибок, то есть удалить (или закомментировать) строку On Error Resume Next. и посмотреть, не выведет ли ошибку.
Back to top
View user's profile Send private message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Wed Aug 30, 2023 17:32    Post subject: Reply with quote

Monarch-LFV
Спасибо огромное, что откликнулись. На Тотале 8.01 скрипт все таки заработал.
Указал конкретный путь к Тоталу и заработало! Папка создается и Тотал в нее входит.
Code:

' Создать папку TEST и войти в нее
' Параметры "%P" (в кавычках)

On Error Resume Next
NewFolder="TEST"
FullpathNewFolder=WScript.Arguments(0) & "\" & NewFolder
set FSO = createobject ("Scripting.FileSystemObject")
FSO.CreateFolder FullpathNewFolder
Set WshShell = CreateObject("WScript.Shell")
WshShell.run "C:\totalcmd\TOTALCMD64.EXE /O /S """ & FullpathNewFolder & """"

Правда Тоталу 10.00 это все до лампочки..
Но это не так уж и важно. Завтра снесу его и поставлю 8.01
А как теперь реализовать на VBA что если такая папка (TEST) уже есть, то создать папку TEST_1, TEST_2 и т.д? На js это просто делается, а вот как это написать на VBA, я вообще не могу представить... Помогите, пожалуйста Embarassed
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Thu Aug 31, 2023 03:52    Post subject: Reply with quote

keramer82
1. Версия тотала тут совсем не причем, более того, использовать более старую версию ТС - неправильный в корне путь. У вас что-то с настройками не то, попробуйте поманипулировать с wincmd.ini (перенести со старой версии в новую / удалить, чтобы ТС создал чистую / провести анализ всех ключей путем удаления части и т.п.).
2. Не VBA, а VBS - это разные скриптовые языки, хоть и похожи.
3. собственно сам код для ваших нужд:
Code:
' Создать папку TEST и войти в нее, если существует, то добавить счетчик
' Параметры "%P" (в кавычках)

On Error Resume Next
NewFolder="TEST"
set FSO = createobject ("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
FullpathNewFolder=WScript.Arguments(0) & "\" & NewFolder
Do while FSO.FolderExists(FullpathNewFolder)
  i=i+1
  FullpathNewFolder=WScript.Arguments(0) & "\" & NewFolder & "_" & i
Loop
FSO.CreateFolder FullpathNewFolder
TCP = WshShell.ExpandEnvironmentStrings("%commander_exe%")
WshShell.run """" & TCP & """ /O /S """ & FullpathNewFolder & """"

4. В коде сменил переменную окружения на %commander_exe%, чтобы сам тотал определял битность, хотя и в прежнем варианте у меня работал как на 32-битном ТС, так и на 64-битном. Попробуйте в данном варианте.
5. Если не заработает как нужно, совет прежний - попробовать убрать обработчик ошибок в коде VBS (писал выше).
Back to top
View user's profile Send private message
keramer82



Joined: 30 Aug 2023
Posts: 7

Post (Separately) Posted: Thu Aug 31, 2023 06:23    Post subject: Reply with quote

Monarch-LFV
Спасибо огромное! Все заработало и на 10.00 Тотал Коммандере. Просто вставил Ваш код в скрипт, и работает просто волшебно. Как тут на форуме можно отметить ответ как решение, не знаю, но это идеальное решение для моих задач! Как раз то, что и было нужно. Спасибо Вам огромное еще раз!
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
Page 1 of 1

 
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