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
helb



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: 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
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Thu Oct 16, 2014 16:19    Post subject: Reply with quote

helb
Тут уже в своё время намекали (и я с этим совершенно согласен), что при выкладывании скриптов в общий доступ пояснения в шапке лучше давать по-русски.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
helb



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: Thu Oct 16, 2014 16:43    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: Thu Oct 16, 2014 17:21    Post subject: Reply with quote

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



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: Tue Nov 11, 2014 15:22    Post subject: Reply with quote

То же на powershell, только вдобавок сохраняет даты модификации у папок при копировании.
Запускать командой вида “powershell <имя.ps1> <параметры>”. PS должен быть установлен (актуально только для Win XP), и должно быть разрешено выполнение скриптов (единовременная команда “Set-ExecutionPolicy RemoteSigned” в среде PS)

toggle-backup.ps1:
Code:
<#   Toggle backup (by helb)
   If entry in the list has no ‘ext’ suffix(extension) copy adding it
   if entry already ends on ‘ext’ copy removing it
   e.g. file.txt > file.txt.t
   
   Parameters: /r /f listfile
   /r - rename instead of copy, /f - force overwrite (both optional), listfile - UTF-8 encoded
   Total Commander list parameter: %UL

   Добавляет к имени каждого выделенного объекта указанный в начале скрипта суффикс (.t) или совершает обратное действие, если он уже есть.
   По умолчанию будет копировать, с опцией /r — переименовывать, опция /f для перезаписи без запроса.
   Использование: [/r] [/f] <файл-список в UTF-8 (%UL)>
#>
$ext = ".t"
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

function msgBx($text, $title, $btns = 0) {
   return [System.Windows.Forms.MessageBox]::Show($text, $title, $btns)
}

if ($args.length -lt 1) { msgBx "No parameters." "Error"; return }
foreach ($a in $args) {
   if ($a -eq "/r") { $rename = $true }
   elseif ($a -eq "/f") { $confirmed = "Yes" }
   else { $list = [environment]::ExpandEnvironmentVariables($a) }
}

if (!(test-path -literalPath $list)) { msgBx "List file not found." "Warning"; return }
else {
   $filelist = get-content $list
   foreach ($name in $filelist) {
      if ($name.substring($name.length-1, 1) -eq "\") { $name = $name.substring(0, $name.length-1) }
      if (test-path -literalPath $name) {
         if ($name.substring($name.length-$ext.length, $ext.length) -eq $ext) {
            $newname = $name.substring(0, $name.length-$ext.length)
         }
         else { $newname = $name + $ext }

         if ((test-path -literalPath $newname) -and !($confirmed)) {
            $confirmed = msgBx "Name conflict. Overwrite all? (‘No’ to skip all)" "Confirm" YesNoCancel
            if ($confirmed -eq "Cancel") { break }
         }
         if ((test-path -literalPath $newname) -and $confirmed -eq "Yes" -or !(test-path -literalPath $newname)) {
            if (test-path -literalPath $newname) { remove-item $newname -recurse }
            if ($rename) {
               move-item -literalPath $name -destination $newname
            }
            else {
               $newfiles = copy-item -literalPath $name -destination $newname -passThru -recurse
               if ($newfiles) {
                  $newfiles | where { $_.PSIsContainer } | foreach {
                     $fname = $_.FullName.replace($newname, $name)
                     $_.LastWriteTime = (get-item -literalPath $fname -force).LastWriteTime
                  }
               }
            }
         }
      }
   }
}
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