Создание папки с выделенными файлами
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Создание папки с выделенными файлами Author: Student22 PostPosted: Fri Oct 03, 2014 23:36
    —
Подскажите, как автоматически создать папку с уже выделенными файлами. Чтобы выделил файлы и создалась папка с ними в этой же вкладке. Такое вобще можно реализовать?

#2:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Oct 04, 2014 00:48
    —
Student22
Во-первых, обычно такие вопросы задаются в подфоруме по автоматизации (куда эта тема и переносится). Во-вторых, сама задача поставлена не вполне вразумительно. "Создалась папка с ними в этой же вкладке" — это что, копирование? перемещение? И речь, разумеется, должна идти не о той же вкладке, а о том же каталоге.
В случае перемещения это вообще стандартный функционал TC, реализованный через инструмент группового переименования (имя_ каталога\[N], есть в справке, обcуждалось на форуме).


Last edited by Avada on Sat Oct 04, 2014 11:50; edited 1 time in total

#3:  Author: sa PostPosted: Sat Oct 04, 2014 10:40
    —
Кнопка с использованием утилиты TCFS2:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "tcm(906,1) delay(200)
send(@`ИМЯ`, findwnd(`TInpComboDlg`)) send(`\ {ENTER}`, findwnd(`TInpComboDlg`))"
%COMMANDER_PATH%\Totalcmd.exe,17
Переместить в папку ИМЯ


-1

#4:  Author: FlasherLocation: Москва PostPosted: Sat Oct 04, 2014 13:01
    —
sa
Телепатишь? Или в личке узнал, что это перемещение, а не копирование Question
P.S.: И спрошено неспроста. Теме светит мод, ибо ответы уже давались.

#5:  Author: sa PostPosted: Sat Oct 04, 2014 15:25
    —
Flasher wrote:
Или в личке узнал, что это перемещение, а не копирование

Нет, не узнал. Разница не велика: для копирования достаточно заменить 906 на 905.

#6:  Author: sa PostPosted: Wed Oct 08, 2014 10:11
    —
Для независимости работы вышеприведённой кнопки от состояния пассивной панели (например, когда в ней открыт архив) модифицировал её, применив вместо команды "Переименовать/переместить файлы" команду "Упаковать файлы в текущий каталог (удалив исходные)". Чтобы включить эту команду, не забудьте ввести в wincmd.ini в секции [Shortcuts] строку CAS+F5=cm_PackFiles
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "send(`^%+{F5}`)
eval(send_wait(@`ИМЯ`, findwnd(`TDLGZIP`))) send(`\{ENTER}`, findwnd(`TDLGZIP`))"
%COMMANDER_PATH%\Totalcmd.exe,17
Переместить в папку ИМЯ


-1

#7:  Author: helb PostPosted: Thu Oct 09, 2014 18:20
    —
Avada wrote:
В случае перемещения это вообще стандартный функционал TC, реализованный через инструмент группового переименования
Обычное копирование/перемещение тоже работает: F5/F6 → <имя каталога>\ → Enter.

Вообще как раз недавно слепил скрипт и повесил на Shift+F7. Создает каталог и перемещает выделенное в него. Если начать с “/” — создает в противоположной панели, если закончить на “\” — переходит в каталог, если использовать “.” вместо имени создает по текущей дате-времени. Все три опции можно сочетать. В качестве имени по умолчанию подставляется то, что под курсором.
Code:
'=====================================================================================
' TC Move to new dir (by helb)
' Creates new dir and moves selected files to it
' Usage: start new dir name with ‘/’ to create+move in opposite panel
' end dir name with ‘\’ to navigate inside after operation
' enter "." instead of name to create dir named with current date+time
' Parameters: %WL "%T" %P%N (list, target panel, suggested name+default parent dir (in case of mixed location mode))
'=====================================================================================
if WScript.Arguments.Count < 3 then
  MsgBox "Not enough parameters", vbOKOnly + vbError, "Warning!"
  Wscript.Quit
end if

dim list, FSO, fObj, fName, fPath, newDir, nav, opp, confirmed
set FSO = CreateObject("Scripting.FileSystemObject")

set fObj = getObj(WScript.Arguments(2))
newDir = InputBox("Enter name. ‘/’ as first character = opposite panel, ‘\’ as last = navigate to dir, ‘.’ = current date-time", "Move to dir", FSO.GetBaseName(fObj))
if NewDir = "" then WScript.Quit

if Right(newDir, 1) = "\" then
   nav = "L"
   newDir = Left(newDir, Len(newDir)-1)
else
   nav = ""
end if
if Left(newDir, 1) = "/" then
   opp = true
   newDir = Replace(newDir, "/", "", 1, 1)
end if
if newDir = "." then newDir = getDateTime(Now)

'wscript.echo(fObj.ParentFolder)
if opp then
   newDir = WScript.Arguments(1) & newDir
   if nav = "L" then nav = "R"
else
   newDir = fObj.ParentFolder & "\" & newDir
end if
if not FSO.FolderExists(newDir) then
   FSO.CreateFolder(newDir)
end if

set list = FSO.OpenTextFile(WScript.Arguments(0), 1, false, true)

do until list.AtEndOfStream
   fName = list.ReadLine
   set fObj = getObj(fName)
   if not fObj is nothing then
      newPath = newDir & "\" & getNameOnly(fName)
'wscript.echo(newpath)
      if objExists(newPath) > 0 and confirmed = Empty then
         confirmed = MsgBox("Name conflict. Overwrite all? (“No” to skip all)" & vbCrLf & "Note: overwriting folders will delete contents", vbExclamation + vbYesNoCancel, "Confirm")
         if confirmed = vbCancel then exit do
      end if
      if objExists(newPath) = 0 then
         fObj.Move(newDir & "\")
      elseif confirmed = vbYes then
         getObj(newPath).Delete
         fobj.Move(newDir & "\")
      end if
   end if
loop

if nav <> "" then
   with CreateObject("WScript.Shell")
      .Run """%COMMANDER_EXE%"" /O /S /" & nav & "=""" & newDir & """", 0, true
      'if nav = "R" Then .SendKeys "{TAB}"
   end with
end if


function getObj(fl)
   if FSO.FileExists(fl) then
      set getObj = FSO.GetFile(fl)
   elseif FSO.FolderExists(fl) then
      set getObj = FSO.GetFolder(fl)
   else
      set getObj = nothing
   end if
end function

function getNameOnly(fl)
   if Right(fl, 1) = "\" then fl = Left(fl, Len(fl)-1)
   getNameOnly = FSO.GetFileName(fl)
end function

'0=not exists, 1=is file, 2=is folder
function objExists(name)
   if FSO.FileExists(name) then
      objExists = 1
   elseif FSO.FolderExists(name) then
      objExists = 2
   else
      objExists = 0
   end if
end function

function getDateTime(dt)
    s = datepart("yyyy",dt)
    s = s & "-" & RIGHT("0" & datepart("m",dt),2)
    s = s & "-" & RIGHT("0" & datepart("d",dt),2)
    s = s & "_"
    s = s & RIGHT("0" & datepart("h",dt),2)
    s = s & "-" & RIGHT("0" & datepart("n",dt),2)
    s = s & "-" & RIGHT("0" & datepart("s",dt),2)
    getDateTime = s
end function

#8:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Oct 09, 2014 19:01
    —
helb wrote:
Обычное копирование/перемещение тоже работает

По исходным условиям тут (если, конечно, с обеих сторон одну и тут же папку не открывать) должно быть не обычное копирование/переименование (F5/F6), а копирование/переименование выделенных файлов в папку, создаваемую в том же каталоге. То есть Shift+F5/Shift+F6.
А, по скрипту, полагаю, специалисты своё слово скажут.

#9:  Author: helb PostPosted: Thu Oct 09, 2014 19:38
    —
Avada
Вы просто попробуйте, если конечно не каким-нибудь древним ТС пользуетесь, где этого могло не быть.
Работает так же прямолинейно и просто как F6 → “..” для перемещения на уровень вверх, пути-то в этих случаях относительные (к текущей активной панели).

#10:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Oct 09, 2014 20:24
    —
helb
С версиями у меня всегда всё в порядке. Smile Да, идею понял.

#11:  Author: FlasherLocation: Москва PostPosted: Thu Oct 09, 2014 23:34
    —
 to Avada

#12:  Author: sa PostPosted: Fri Oct 10, 2014 01:00
    —
helb wrote:
Обычное копирование/перемещение тоже работает

А если в пассивной панели открыта системная папка?

#13:  Author: helb PostPosted: Fri Oct 10, 2014 01:58
    —
Flasher wrote:
там всё на аглицком
Нет, не на аглицком, а на VBScript'е :)

sa wrote:
А если в пассивной панели открыта системная папка?

Ну так диалоги Shift+F5/Shift+F6 так же работают.

#14:  Author: FlasherLocation: Москва PostPosted: Fri Oct 10, 2014 02:25
    —
helb wrote:
Нет, не на аглицком, а на VBScript'е Smile
А это хто? Shocked
Ладно, шутки шутками. Про шапку я, про шааапку. Ну привыкли мы тут на родном языке для русскоговорящих изъясняться, на инордном не шпрэхаем. Wink

#15:  Author: sa PostPosted: Fri Oct 10, 2014 09:36
    —
helb wrote:
Ну так диалоги Shift+F5/Shift+F6 так же работают.

У меня не было сомнений по этому поводу. Потому и предложил вариант с Ctrl+Alt+Shift+F5 с назначенной командой cm_PackFiles.
Но для случая системной папки в активной панели, он тоже не работает.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group