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: 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
                  }
               }
            }
         }
      }
   }
}
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group