View previous topic :: View next topic |
Author |
Message |
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Wed Aug 30, 2023 13:17 Post subject: Как войти в папку из скрипта в Тотал Коммандер? |
|
|
Доброго времени суток! Пишу небольшой скрипт для Тотал Коммандера. Скрипт должен просто создавать определенную папку в текущем каталоге и входить в нее. Вроде все сделал, но открытие создаваемой папки происходит в проводнике, а нужно остаться в Тотал Коммандере. Подскажите, пожалуйста, как это сделать (создать папку и сразу войти в нее)? Вот что у меня есть на данный момент:
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 |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Wed Aug 30, 2023 14:14 Post subject: |
|
|
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 |
|
|
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Wed Aug 30, 2023 14:50 Post subject: |
|
|
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 |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Wed Aug 30, 2023 15:04 Post subject: |
|
|
keramer82
Создайте файл "Create_New_Folder_Extended.vbs" с содержимым, которое я написал выше. Данный файл перетащите на панель кнопок ТС, создастся кнопка. Далее нажмите "Изменить" в контекстном меню данной кнопки и в параметрах пропишите (вместе с кавычками): "%P" |
|
Back to top |
|
|
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Wed Aug 30, 2023 15:13 Post subject: |
|
|
Monarch-LFV, папка то создается. Кнопка срабатывает, выводится окно с просьбой ввести что-то, (что именно, не понятно, описание кракозябрами), но дата сегодняшняя уже стоит. Кликаю "ок", папка создается, в названии - то, что предлагалось ввести (дата). Но в созданную папку Тотал не заходит.. |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Wed Aug 30, 2023 15:28 Post subject: |
|
|
keramer82
Кодировку файла VBS поменяйте на CP-1251. |
|
Back to top |
|
|
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Wed Aug 30, 2023 15:38 Post subject: |
|
|
Теперь понятен стал текст про звездочки. Но в создаваемую папку все равно не входит. Просто создает и все. |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Wed Aug 30, 2023 15:46 Post subject: |
|
|
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 |
|
|
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Wed Aug 30, 2023 16:07 Post subject: |
|
|
Пробовал вводить разные имена создаваемой папке. И на русском, и на латинице, и цифры. И просто кликал "ок". Текст скрипта скопировал, вставил, сохранил еще раз. Параметры буквально поставил – "%P" вместе с кавычками. Создавать папку пробовал в корне диска С. Пробовал во вложенных папках, например c:\Total Scripts\
Результат один и тот же — папка просто создается и все. Тотал внутрь этой папки, как бы она не называлась, и где бы не находилась, не заходит.
Тотал 10.00. Запрета на открытие второго Тотала нет.
Попробовал на другой машине, Тотал 8.01 — в создаваемую папку заходит! НО открывает второй Тотал Коммандер, что совсем не подходит. А остаться в том же Тотале, в котором создается папка можно? Может параметр какой-то еще прописать нужно... |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Wed Aug 30, 2023 16:16 Post subject: |
|
|
keramer82
Не знаю почему у вас не работает. Собственно, параметры /O /S - как раз и определяют действия ТС.
Читайте справку ТС полностью. Приведу только выдержки оттуда по этим ключам:
/O - Если Total Commander уже запущен, этот параметр активизирует его и передаёт путь (пути) из командной строки в эту копию программы (независимо от настройки в диалоге конфигурации, позволяющей открывать несколько окон Total Commander).
/S - Воспринимает переданные каталоги как исходный/целевой вместо левого/правого (для совместного применения с параметром /O). Например, каталог, переданный с ключом /R= будет воспринят как каталог назначения.
Попробуйте разобраться самостоятельно, так как у меня эти скрипты работают, как заявлено.
Для начала попробуйте отключить пропуск ошибок, то есть удалить (или закомментировать) строку On Error Resume Next. и посмотреть, не выведет ли ошибку. |
|
Back to top |
|
|
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Wed Aug 30, 2023 17:32 Post subject: |
|
|
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, я вообще не могу представить... Помогите, пожалуйста |
|
Back to top |
|
|
Monarch-LFV
Joined: 22 Jul 2019 Posts: 303
|
(Separately) Posted: Thu Aug 31, 2023 03:52 Post subject: |
|
|
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 |
|
|
keramer82
Joined: 30 Aug 2023 Posts: 7
|
(Separately) Posted: Thu Aug 31, 2023 06:23 Post subject: |
|
|
Monarch-LFV
Спасибо огромное! Все заработало и на 10.00 Тотал Коммандере. Просто вставил Ваш код в скрипт, и работает просто волшебно. Как тут на форуме можно отметить ответ как решение, не знаю, но это идеальное решение для моих задач! Как раз то, что и было нужно. Спасибо Вам огромное еще раз! |
|
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
|