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 

Поточный бэкап файлов - папок
Goto page Previous  1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Mon Apr 19, 2010 21:45    Post subject: Reply with quote

Batya wrote:
Копирование выделенных файлов\папок с добавлением в начало и конец нового имени определённого текста

Скрипт удаляет оригинальный файл\папку, т.е. переименовывает исходную.. а хотелось бы, что бы оригинальный файл оставался, а рядом создавался "бэкап"
Подскажите пожалуйста, что подправить.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Apr 19, 2010 23:40    Post subject: Reply with quote

HA3APET wrote:
Скрипт удаляет оригинальный файл\папку, т.е. переименовывает исходную.. а хотелось бы, что бы оригинальный файл оставался, а рядом создавался "бэкап"

Вы, возможно, что-то путаете. Вот этот скрипт выполняет "Переименование выделенных файлов\папок". А вот этот скрипт выполняет "Копирование выделенных файлов\папок".
Если у Вас не так, приведите текст Вашего скрипта.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
HA3APET



Joined: 22 Feb 2010
Posts: 151

Post (Separately) Posted: Tue Apr 20, 2010 01:52    Post subject: Reply with quote

Batya
Перетрудился я, всё работает.
Спасибо вам большое.
Back to top
View user's profile Send private message
Nick



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Tue Jan 27, 2015 19:19    Post subject: Reply with quote

Что надо изменить в скрипте, чтобы файлы и папки получались вида (например): wincmd__1.ini.bak, wincmd__2.ini.bak и т.д. ? Т.е. если уже существует бэкап, то создавался бы новый со следующим номером в имени.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Jan 30, 2015 13:41    Post subject: Reply with quote

Там менять-то нечего. Сделал новый:
Code:
'=======================================================================
' Копировать с переименованием по счётчику и добавочным расширением
' Параметры: %WL "<путь получателя>" <вставка перед №> <доп. расширение>
'=======================================================================
With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  If C <> 4 Then MsgBox "Следует указать 4 параметра!", 48,_
  Space(12) & "Ошибка вводных данных" : WScript.Quit : End If
  List = .Item(0) : P = .Item(1) : S1 = .Item(2) : S2 = .Item(3)
End With

With CreateObject("Scripting.FileSystemObject")
  Path = .BuildPath(P, "\")
  Set List = .OpenTextFile(List,,,-1)
  Do : F = List.ReadLine
    If .FileExists(F) Then
      BN = .GetBaseName(F) : Ext = "." & .GetExtensionName(F)
      If Ext = "." & S2 Then
        Ext = "." & .GetExtensionName(BN) : Test = InStrRev(BN, S1)
        If Ext <> "." Then
          If Test Then BN = Left(.GetBaseName(BN), Test - 1)
        Else Ext = ""
          If Test And IsNumeric(Mid(BN, Test + Len(S1))) Then _
          BN = Left(.GetBaseName(BN), Test - 1)
        End If
      End If : F1 = Path & BN & S1 : S = Ext & "." & S2 : i = 1
      While .FileExists(F1 & i & S) : i = i + 1 : Wend
      .CopyFile F, F1 & i & S
    Else
      F1 = Path & .GetFileName(F) & S1 : i = 1
      While .FolderExists(F1 & i & "." & S2) : i = i + 1 : Wend
      .GetFolder(F).Copy F1 & i & "." & S2
    End If
  Loop Until List.AtEndOfStream
End With : 'CreateObject("WScript.Shell").SendKeys "^R"
Если нужно более быстрое появление в панели, то убираем апостроф в посл. строке.
Как это работает:
Code:
Имена выбранных файлов          Результаты
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯          ¯¯¯¯¯¯¯¯¯¯
Name.ext                        Name<префикс>№+1.ext.<постфикс>
Name.ext.<постфикс>             Name<префикс>№+1.ext.<постфикс>
Name<префикс>№.ext.<постфикс>   Name<префикс>№+1.ext.<постфикс>

Для папок - без заморочек:
Name                            Name<префикс>№+1.<постфикс>

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



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Thu Feb 05, 2015 18:08    Post subject: Reply with quote

Flasher
Спасибо за скрипт, но с длинными путями не работает.
---------------------------
Строка: 32
Символ: 8
Ошибка: Путь не найден
---------------------------
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Thu Feb 05, 2015 19:49    Post subject: Reply with quote

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



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Thu Mar 05, 2015 21:31    Post subject: Reply with quote

Flasher
Какие строки нужно исправить, чтобы работал скрипт без "постфикс"?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Thu Mar 05, 2015 21:37    Post subject: Reply with quote

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



Joined: 18 Feb 2011
Posts: 147

Post (Separately) Posted: Sat May 14, 2016 13:15    Post subject: Reply with quote

Flasher
По-поводу скрипта

Например, имеем файл Program.exe. Хотелось бы получать вот такой результат:
Program.exe.bak
Program.exe.bak (1)
Program.exe.bak (2)
Program.exe.bak (3)

Можно реализовать сие?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon May 16, 2016 12:01    Post subject: Reply with quote

Lisabon
Сделал с тем же принципом, только от последнего номера:
Code:
'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Cоздать копии с добавочным расширением для выбранных элементов
' с добавлением счётчика в скобках, начиная с последнего номера

' Параметры: %WL "<путь назначения>" <расширение копии>
' Примеры:   %WL "%P"   |   %WL "%T" old
'••••••••••••••••••••••••••••••••••••••••• Автор - Flasher © •••

Option Explicit: Dim C, List, Reg, Path, Ext, ShA,_
FSO, F, Test, Filt, M, Items, Cnt, Max, T, x, i, FN

With WScript.Arguments
  C = .Count : Ext = ".bak" : If C = 0 Then WScript.Quit
  If C = 1 Then MsgBox "Должно быть указано " & vbCr & _
  "не менее 2-х параметров!",48, " BackUp": WScript.Quit
  List = .Item(0)  : Path = .Item(1)
  If C = 3 Then Ext = "." & .Item(2)
End With: Set ShA = CreateObject("Shell.Application")
Set FSO  = CreateObject("Scripting.FileSystemObject")
Set List = FSO.OpenTextFile(List,,,-1)
Set Reg  = New Regexp
Reg.Pattern = "(.*" & Ext & ") \((\d+)\)$"
Path = FSO.BuildPath(Path, "\")

Do : F = Trim(List.ReadLine)
  If F <> "" Then
    FN = FSO.GetFileName(F) : Max = 0
    If Right(FN, Len(Ext)) = Ext Then T = 1
    If Reg.Test(FN) Then
      With Reg.Execute(FN)(0) FN = .Submatches(0):_
      Max = CLng(.Submatches(1)) End With : T = 1
    End If
    If T <> 1 Then
      FN = FN & Ext : If FSO.FileExists(Path & FN) Or _
      FSO.FolderExists(Path & FN) Then T = 1
    End If
    If FSO.FolderExists(F) Then
         Test = 1 : Filt = 73888
    Else Test = 0 : Filt = 73920 End If
    If T = 1 Then
      Set Items = ShA.NameSpace(Path).Items
      Items.Filter Filt, FN & " (*)"
      Cnt = Items.Count
      If Cnt Then
        For x = 0 To Cnt - 1
          M = Items.Item(x) : If Reg.Test(M) Then _
          M = CLng(Reg.Execute(M)(0).Submatches(1)):_
          If M > Max Then Max = M
        Next : FN = FN & " (" & Max + 1 & ")"
      Else FN = FN & " (1)" End If
    End If : FN = FSO.BuildPath(Path, FN)
    If Test Then FSO.GetFolder(F).Copy FN, 0 Else FSO.CopyFile F, FN, 0
  End If
Loop Until List.AtEndOfStream

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Mon May 16, 2016 14:18; edited 1 time in total
Back to top
View user's profile Send private message
Lisabon



Joined: 18 Feb 2011
Posts: 147

Post (Separately) Posted: Mon May 16, 2016 12:21    Post subject: Reply with quote

Flasher
Спасибо! То, что нужно.
Back to top
View user's profile Send private message
Iori



Joined: 25 Apr 2012
Posts: 551

Post (Separately) Posted: Mon Aug 21, 2017 04:22    Post subject: Reply with quote

Flasher wrote:
Сделал с тем же принципом, только от последнего номера:


Что надо изменить в твоём скрипте (Cоздать копии с добавочным расширением для выбранных элементов с добавлением счётчика в скобках, начиная с последнего номера ), что бы к папкам не прибавлялись расширения и счетчик начинался сразу.

Примеры:

Папка
Папка (1)
Папка (2)
Папка (3)

Файл.ехе
Файл.ехе (1)
Файл.ехе (2)
Файл.ехе (3)
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Aug 21, 2017 04:54    Post subject: Reply with quote

Iori
Мой ответ выше виден? Тут алгоритм заточен под сабж.
Можно, конечно, скостылить, убрав в 17 строке красное (... "." & .Item(2)), а в качестве 3 параметра писать "", но, по мне, это не дело.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Iori



Joined: 25 Apr 2012
Posts: 551

Post (Separately) Posted: Mon Aug 21, 2017 05:13    Post subject: Reply with quote

Flasher
Ну ладно. Smile Я могу в теме копирование с переименовыванием по счетчику задать вопрос.

Flasher wrote:
но, по мне, это не дело.

В каком смысле? Не хочешь использовать костыли?
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
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
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