Страница 4 из 13
Добавлено: Пн июл 30, 2012 17:51
sa
obse писал(а):Скажите, можно ли написать bat-файл
Вариант с поиском файлов (Alt+F7), выводом (из результатов поиска) файлов на панель и последующим копированием в нужный каталог с опцией “Автоматически переименовывать копируемые файлы” не устраивает?
Добавлено: Пн июл 30, 2012 18:24
obse
sa
В TC конечно меня устраивает, но батник нужен на другой компьютер, где пользователь умеет только два раза кликнуть на файл. Там вообще проблемы с пользователем, именно поэтому и хотелось бы батник, чтоб все двумя кликами началось и закончилось.
Добавлено спустя 3 минуты:
Avada
Спасибо, я постараюсь усвоить. Наверно смысл похожий в ветке был, вот и подумал, что помогут.
Добавлено: Пн июл 30, 2012 20:26
Flasher
obse
Сделать не проблема, только на данном форуме оффтоп. Тут решаются задачи в комбинации с ТС, что нетрудно понять из названия подфорума. С этим лучше
сюда.
Добавлено: Пн июл 30, 2012 23:35
Avada
obse писал(а):Спасибо, я постараюсь усвоить.
А ещё хорошо бы усвоить и
вот это.
Избыточное цитирование удалено.
Что касается привязки проблемы к TC или отсутствию таковой, тут уж прошу определиться однозначно. Как верно было сказано выше, без такой привязки поставленная задача — вне тематики данного форума.
Добавлено: Вт июл 31, 2012 00:12
obse
Спасибо за поучения. Я же читаю, то сделать не проблема, это не проблема, а для меня проблема, вот и подумал, вдруг помогут. Ну нет, так нет, извините что с ложкой от каши в ваш суп залез. Совсем не сарказм, просто устал искать, ваш форум не первый.
Извините, удаляюсь.
Добавлено: Вт июл 31, 2012 21:06
Tol!k
Буквы дисков заранее известны?
Добавлено: Вт июл 31, 2012 23:02
Flasher
Tol!k
Спроси по
месту назначения.
Добавлено: Вс фев 10, 2013 03:35
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 , но у меня почему-то не сработали эти параметры в батнике.
Заранее спасибо.
Добавлено: Пн фев 11, 2013 01:28
Tol!k
а может лучше добавлять дату/время?
Добавлено: Пн фев 11, 2013 05:13
Iori
Лутше конечно что-бы было по схеме File.ext_bak1.
Я как-то уж очень привык

Притом время и дата не очень критичны для меня, а глаза мозолить будут.
Добавлено: Пн фев 11, 2013 15:47
Flasher
Я знаю, почему
Tol!k не хочет. Там с числовой сортировкой отфильтрованного по шаблону списка надо ковыряться.
Я уже нечто подобное для папок
делал, но там реализация не ахти.
Могу и тут на vbs, но не сразу.
Добавлено: Пн фев 11, 2013 17:15
Tol!k
да, дело в сортировке
z:\>dir /b/oe File.ext_bak*
File.ext_bak1
File.ext_bak10
File.ext_bak9
но не только. Нужно ещё выкусить номер из имени, а с этим могут возникнуть проблемы из-за спецсимволов
Добавлено: Пн фев 11, 2013 17:55
Flasher
Tol!k писал(а):Нужно ещё выкусить номер из имени
Сперва надо получить массив по фильтру, а потом уже выкусывать. Через set, я полагаю? На vbs с этим, конечно, проще.
А ещё нужно предупреждать такие моменты: name (3) (4).exe, т.е. считывать скобки (или что там) с конца. Плюс ко всему, не помешает проверять уже существующие имена с номером, и если курсор на таком файле, то не добавлять номер ко всему имени, а копировать со сменой только номера, взятого из последнего элемента массива. В массиве, ест., могут быть на конце нечисловые символы в заглушах, их нужно отсекать в цикле, отнимая от номера массива поединично, пока условие не достигнет числового статуса.
Добавлено: Пн фев 11, 2013 19:52
Iori
Tol!k
Не знаю если это поможет, но я больше 10-ти бекапов папки/файла не использую. Можно даже сделать от File.ext_bak1 до File.ext_bak9
Может это можно сделать через IF NOT EXIST команду.
Добавлено: Сб фев 16, 2013 22:39
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)
>.
В случае, если получатель отличается от источника, и в нём нет копий со счётчиком, отчёт будет идти от № текущего элемента.