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 

Single Post  Topic: Создание/восстановление временного бэкапа в текущей папке 
Author Message
helb



PostPosted: Thu Oct 16, 2014 16:13    Post subject: Создание/восстановление временного бэкапа в текущей папке Reply with quote

Давно завел практику по-быстрому создавать временные копии (или переименовывать) файлов и папок добавляя расширение “.t”. Примерно таким образом: Shift+F5(F6) → End → .t → Enter и назад Shift+F5(F6) → End → Backspace×2 → Enter. Маска “*.t?” у меня подсвечена сиреневым, так что такие копии сразу заметны.

Надоело аж целых шесть нажатий по всей клавиатуре делать, сделал скрипт и повесил на F12 и Ctrl+F12 :)
Добавляет к имени каждого выделенного объекта указанный в начале скрипта суффикс (.t) или совершает обратное действие, если он уже есть. По умолчанию будет копировать, с опцией /r — переименовывать, опция /f для перезаписи без запроса.
Использование: [/r] [/f] <файл-список в UTF-16 (%WL)>
toggle-backup.vbs:
Code:
'==========================================================
' Toggle backup (by helb)
'Добавляет к имени каждого выделенного объекта указанный в начале скрипта суффикс (.t) или совершает обратное действие, если он уже есть.
'По умолчанию будет копировать, с опцией /r — переименовывать, опция /f для перезаписи без запроса.
'Использование: [/r] [/f] <файл-список в UTF-16 (%WL)>
'==========================================================
Option Explicit
dim ext : ext = ".t" 'edit this variable for your own suffix
dim FSO, fobj, name, list, F, confirmed, rename
set FSO = CreateObject("Scripting.FileSystemObject")

if WScript.Arguments.length = 0 then
   WScript.Echo("No parameters specified")
   WScript.Quit
end if
for each F in WScript.Arguments
   if F = "/r" then
      rename = true
   elseif F = "/f" then
      confirmed = vbYes
   elseif FSO.FileExists(F) then
      List = F
   end if
next

for each F in Split(FSO.OpenTextFile(List, 1, false, -1).ReadAll, vbNewLine)
   if F <> "" then
      set fobj = getObj(F)
      if not fobj is nothing then
         name = getNewName(fobj.Path)
         if objExists(name) > 0 and confirmed = Empty then
            confirmed = MsgBox("Name conflict. Overwrite all? (“No” to skip all)", vbExclamation + vbYesNoCancel, "Confirm")
            if confirmed = vbCancel then exit for
         end if
         if objExists(name) > 0 and confirmed = vbYes or objExists(name) = 0 then
            if rename then
               if objExists(name) > 0 then getObj(name).Delete
               fobj.Move(name)
            else
               fobj.Copy(name)
            end if
         end if
      end if
   end if
next


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

'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 getNewName(name)
   if Right(name, Len(ext)) = ext then getNewName = Left(name, Len(name) - Len(ext)) else getNewName = name & ext
end function


Last edited by helb on Thu Oct 16, 2014 16:28; edited 1 time in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group