Копирование с переименовыванием по счетчику

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

obse писал(а):Скажите, можно ли написать bat-файл
Вариант с поиском файлов (Alt+F7), выводом (из результатов поиска) файлов на панель и последующим копированием в нужный каталог с опцией “Автоматически переименовывать копируемые файлы” не устраивает?
obse
Сообщения: 3
Зарегистрирован: Пн июл 30, 2012 16:19

Сообщение obse »

sa
В TC конечно меня устраивает, но батник нужен на другой компьютер, где пользователь умеет только два раза кликнуть на файл. Там вообще проблемы с пользователем, именно поэтому и хотелось бы батник, чтоб все двумя кликами началось и закончилось.

Добавлено спустя 3 минуты:

Avada
Спасибо, я постараюсь усвоить. Наверно смысл похожий в ветке был, вот и подумал, что помогут.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

obse
Сделать не проблема, только на данном форуме оффтоп. Тут решаются задачи в комбинации с ТС, что нетрудно понять из названия подфорума. С этим лучше сюда.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

obse писал(а):Спасибо, я постараюсь усвоить.
А ещё хорошо бы усвоить и вот это. Избыточное цитирование удалено.
Что касается привязки проблемы к TC или отсутствию таковой, тут уж прошу определиться однозначно. Как верно было сказано выше, без такой привязки поставленная задача — вне тематики данного форума.
Даже самая богатая фантазия
Не представит себе наши безобразия.
obse
Сообщения: 3
Зарегистрирован: Пн июл 30, 2012 16:19

Сообщение obse »

Спасибо за поучения. Я же читаю, то сделать не проблема, это не проблема, а для меня проблема, вот и подумал, вдруг помогут. Ну нет, так нет, извините что с ложкой от каши в ваш суп залез. Совсем не сарказм, просто устал искать, ваш форум не первый.
Извините, удаляюсь.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Буквы дисков заранее известны?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
Спроси по месту назначения.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Tol!k

Давно изпользую ваш батник с счётчиком:
http://forum.wincmd.ru/viewpost.php?p=62933

В батнике я только заменил два пункта.

rem if "%pre%"=="" set "pre=%~n2" на if "%pre%"=="" set "pre=%~n2%~x2"
и
rem set "new=%pre%_%e%%ext%" на set "new=%pre%%ext%_bak%e%"

Сейчас батник создаёт бакап файлов/папок по схеме:

File.ext_bak1
File.ext_bak2
File.ext_bak3

Если стереть папку или файл File.ext_bak1, то хотелось бы что-бы при нажатие на кнопку создавался File.ext_bak4, а не File.ext_bak1. Иначе происходит путаниться.

И ещё, можно ли сделать так что-бы был виден процесс копирования. В xcopy это вроде делатеся через /L /F , но у меня почему-то не сработали эти параметры в батнике.

Заранее спасибо.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

а может лучше добавлять дату/время?
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Лутше конечно что-бы было по схеме File.ext_bak1.
Я как-то уж очень привык :) Притом время и дата не очень критичны для меня, а глаза мозолить будут.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Я знаю, почему Tol!k не хочет. Там с числовой сортировкой отфильтрованного по шаблону списка надо ковыряться.
Я уже нечто подобное для папок делал, но там реализация не ахти.
Могу и тут на vbs, но не сразу.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

да, дело в сортировке
z:\>dir /b/oe File.ext_bak*
File.ext_bak1
File.ext_bak10
File.ext_bak9
но не только. Нужно ещё выкусить номер из имени, а с этим могут возникнуть проблемы из-за спецсимволов
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k писал(а):Нужно ещё выкусить номер из имени
Сперва надо получить массив по фильтру, а потом уже выкусывать. Через set, я полагаю? На vbs с этим, конечно, проще.
А ещё нужно предупреждать такие моменты: name (3) (4).exe, т.е. считывать скобки (или что там) с конца. Плюс ко всему, не помешает проверять уже существующие имена с номером, и если курсор на таком файле, то не добавлять номер ко всему имени, а копировать со сменой только номера, взятого из последнего элемента массива. В массиве, ест., могут быть на конце нечисловые символы в заглушах, их нужно отсекать в цикле, отнимая от номера массива поединично, пока условие не достигнет числового статуса.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Tol!k

Не знаю если это поможет, но я больше 10-ти бекапов папки/файла не использую. Можно даже сделать от File.ext_bak1 до File.ext_bak9
Может это можно сделать через IF NOT EXIST команду.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori

Код: Выделить всё

'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Cоздать указанное число копий для каждого выбранного элемента
' с добавлением счётчика в скобках, начиная с последнего номера
' Параметры: %WL "<путь назначения>" <число копий>
' Пример: %WL "%P" 5

' Автор - Flasher ©
'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  If .Count <> 3 Then MsgBox "Должно быть указано три параметра!", 48 : WScript.Quit : End If
  List = .Item(0) : Path = .Item(1) : Count = .Item(2)
End With : If Right(Path, 1) <> "\" Then Path = Path & "\" 

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(Path)
Set SFolds = Folder.SubFolders : Set SFiles = Folder.Files
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, vbNewLine)
  If F <> "" Then
    If FSO.FolderExists(F) Then Test = 1 Else Test = 0
    If Test Then Set SF = SFolds Else Set SF = SFiles
    TestF F, Ext, Ent, BN
    If Ent And Right(BN, 1) = ")" Then
      M = Mid(BN, Ent + 1, Len(BN) - Ent - 1)
      If IsNumeric(M) Then Max = CLng(M)
      BN = Left(BN, Ent - 2)
    End If
    For Each FF in SF
      TestF FF, Ext1, Ent1, BN1
      If Ext = Ext1 And BN & " (" = Left(BN1, Len(BN) + 2) Then
        If Ent1 And Right(BN1, 1) = ")" Then
          Num = Mid(BN1, Ent1 + 1, Len(BN1) - Ent1 - 1)
          If IsNumeric(Num) Then
            Num = CLng(Num) : If Max < Num Then Max = Num
          End if
        End If
      End If
    Next
    For i = 1 To Count
      If Test Then FSO.GetFolder(F).Copy Path & BN & " (" & Max + i & ")", 0 _
      Else FSO.CopyFile F, Path & BN & " (" & Max + i & ")." & Ext, 0
    Next
  End If : Set SF = Nothing
Next : Set SFiles  = Nothing : Set SFolds = Nothing
Set Folder = Nothing : Set FSO = Nothing : WScript.Quit

Sub TestF(Fl, Ex, E, B)
  If FSO.FolderExists(Fl) Then
    B = FSO.GetFileName(Fl)
  Else
    B = FSO.GetBaseName(Fl) : Ex = LCase(FSO.GetExtensionName(Fl))
  End If : E = InStrRev(B, "(")
End Sub
Вместо сортировки по старинке - максимум.
Понимает имена с юникодными символами.
Выбраны могут быть в т.ч. элементы <имя (№)>, будут создаваться <имя (№+1)>.
В случае, если получатель отличается от источника, и в нём нет копий со счётчиком, отчёт будет идти от № текущего элемента.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить