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 

Копирование/вставка (Copy & Paste) атрибутов/времен файлов

 
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 Apr 28, 2016 00:47    Post subject: Копирование/вставка (Copy & Paste) атрибутов/времен файлов Reply with quote

Скрипт для копирования и вставки атрибутов файлов. Вешается на два хоткея (например Ctrl+Shift+D - Copy, Ctrl+Shift+F - Paste — по-близости от Ctrl+C/Ctrl+V). При копировании сохраняет только атрибуты (включая время) без имен файлов в файл в TEMP, которые впоследствии можно восстановить, и не обязательно на оригинальный(ые) файл(ы). Paste — при несоответствии числа выделенных файлов числу сохраненных предложит восстановить либо атрибуты одного файла на все выделенные, либо начальных из списка на все выделенные, если вторых меньше.

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

copy-paste-attributes.ps1
Code:
<#   Copy-paste attributes [by helb] v2015-12-07
   Сохраняет атрибуты указанных файлов и папок (без соответствия имен) в CSV-файл (copy) или устанавливает из него (paste).
   Использование: “<list file (UTF-8)> [/r] [/p]” (p=вставить, r=рекурсивно)
   Saves attributes of listed files and folders (without name relation) to a CSV file (copy) or sets from previously saved ones (paste).
   Usage: “<list file (UTF-8)> [/r] [/p]” (p=paste, r=recursively)
   Total Commander list parameter: %UL
#>
$attributeFile = "%TEMP%\attributes-11e0d9f8-3a10-48be-a9f0-4e8984a2a7ca.tmp"
[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 ($arg in $args) {
   if ($arg -eq "/p") {$restore = $true}
   elseif ($arg -eq "/r") {$recurse = $true}
   else {$list = [environment]::ExpandEnvironmentVariables($arg)}
}

if (!(test-path -literalPath $list)) { msgBx "List file not found." "Warning"; return }
else {
   $attributeFile = [environment]::ExpandEnvironmentVariables($attributeFile)
   $files = @()
   [array]$filelist = get-content $list
   foreach ($name in $filelist) {
      if (test-path -literalPath $name) {
         $files += get-item -literalPath $name -force
         if ($recurse) {
            $tmpfiles = get-childItem -literalPath $name -recurse -force #| sort-object FullName
            if (!($tmpfiles.FullName -and $tmpfiles.FullName -eq $name)) {$files += $tmpfiles}
         }
      }
   }
   if ($restore){
      if (!(test-path -literalPath $attributeFile)) { msgBx "No attribute file." "Error"; return }
      [array]$attributes = import-csv $attributeFile -delimiter "`t"
      $i = 0
      if ($files.length -le $attributes.length) {
         if ($files.length -lt $attributes.length){
            $re = msgBx "Number of listed files is lower than stored attributes. Proceed anyway?" "Warning" 4
            if ($re -ne "Yes") {
               return
            }
         }
         foreach ($file in $files) {
            if (test-path -literalPath $file.FullName) {
               $file.IsReadOnly = $false
               $file.CreationTime = $attributes[$i].CreationTime
               $file.LastWriteTime = $attributes[$i].LastWriteTime
               $file.LastAccessTime = $attributes[$i].LastAccessTime
               $file.Attributes = $attributes[$i].Attributes
            }
            $i++
         }
      }
      else {
         $re = msgBx "Number of listed files is greater than stored attributes. Paste first entry to everything?" "Warning" 4
         if ($re -eq "Yes") {
            foreach ($file in $files) {
               if (test-path -literalPath $file.FullName) {
                  $file.IsReadOnly = $false
                  $file.CreationTime = $attributes[0].CreationTime
                  $file.LastWriteTime = $attributes[0].LastWriteTime
                  $file.LastAccessTime = $attributes[0].LastAccessTime
                  $file.Attributes = $attributes[0].Attributes
               }
            }
         }
      }
   }
   else {
      $files | select FullName, CreationTime, LastWriteTime, LastAccessTime, Attributes | export-csv $attributeFile -force -delimiter "`t" -encoding "UTF8"
   }
}
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Thu Apr 28, 2016 11:37    Post subject: Reply with quote

Куда проще (и в чем-то безопаснее) не трогать политику, а просто добавлять аргумент -ExecutionPolicy Bypass при запуске PowerShell. Кстати, аргумент -NoProfile тоже лишним не будет.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
KatMuse



Joined: 26 Jul 2014
Posts: 82

Post (Separately) Posted: Mon May 02, 2016 18:58    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: Mon May 02, 2016 19:22    Post subject: Reply with quote

KatMuse
Тут речь про копирование атрибутов, а не файлов/папок.

 OFF

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



Joined: 26 Jul 2014
Posts: 82

Post (Separately) Posted: Tue May 03, 2016 19:11    Post subject: Reply with quote

Правильно я понимаю, что это решение проблемы с помощью CopyTree?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue May 03, 2016 20:25    Post subject: Reply with quote

 2KatMuse

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



Joined: 26 Jul 2014
Posts: 82

Post (Separately) Posted: Fri May 06, 2016 13:26    Post subject: Reply with quote

Не нашёл встроенную опцию Sad
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Fri May 06, 2016 13:35    Post subject: Reply with quote

KatMuse
Встроенная опция — не обязательно диалоговая, это и синоним для ключа. Ссылка на тему с упоминанием CopyAllTimes и пр. для чего давалась? (А скрин демонстрирует разве что неумение/нежелание настроить оптимальный шрифт для диалогов TC и их размер.)
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
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