1

Тема: VBS: Копирование файлов по списку. Сортировка по папкам.

Доброго времени суток! Фабула задачи такова :
естьtempout.txt файл с перечнем имен файлов без расширений, в виде 020_1290 ;
StartFolder = D:\ - откуда копируем;
EndFolder = D:\PL\ - куда копируем.
Нужно скопировать заданные в списке файлы (с любым расширением). Начал делать дошел до разбора строк и "споткнулся" на сравнивании переменных,  строк из масива с именами файлов. Не хватает опыта и знаний. 
И еще вопрос как в папке рассортировать содержимое  по подпапкам имена которых это первые 3 символа имён файлов, т.е. 19zap.txt и archiv.avi  из папки D:\svalka\  переместятся  19zap.txt в D:\svalka\19z\ ,  а  archiv.avi в D:\svalka\arc\. За ранее благодарен.

2 (изменено: Flasher, 2015-09-11 06:21:43)

Re: VBS: Копирование файлов по списку. Сортировка по папкам.

dmitriypopov86
Касаемо первый задачи: структура должна сохраняться, или всё кидать в одну папку? Если да, то букву диска не брать?
Это одноразовая задача? Насколько тут принципиален vbs?
А то можно было бы воспользоваться инструментарием Total Commander, например.

Ладно, я ждать уже не буду. Потом отпишитесь. Пока так (tempout.txt в UTF-16):

'================================================================================
' Назначение: копирование файловой структуры по списку базовых имён
' Параметры: "<путь к исходной папке>" "<путь к целевой папке>" "<путь к списку>"
'================================================================================

Option Explicit
Dim Title, IDir, ODir, List, LenID, Shell, FSO, Filt, OutDisk, Chek

Title = " Копирование структуры файлов по списку имён     "
With WScript.Arguments
  If .Count <> 3 Then MsgBox "Укажите 3 параметра!", 4144, Title : WScript.Quit
  IDir = .Item(0) : ODir = .Item(1) : List = .Item(2)
End With : LenID = Len(IDir) + 1
Set Shell = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
Filt = Join(Split(FSO.OpenTextFile(List,,,-1).ReadAll, vbNewLine), ".*;") & ".*"
Set OutDisk = Shell.NameSpace(FSO.GetDriveName(ODir))
FFolder IDir, Chek : If Chek = 1 Then MsgBox "Выполнено!", 4160, Title Else _
MsgBox "Нет файлов с заданными базовыми именами!", 4144, Title

Sub FFolder(Folder, T)
  Dim Items, OutDir, Fd
  Set Folder = Shell.NameSpace(Folder)
  Set Items  = Folder.Items
  Items.Filter 75968, Filt
  If Items.Count Then
    OutDir = FSO.BuildPath(ODir, Mid(Folder.Self.Path, LenID))
    If Not FSO.FolderExists(OutDir) Then OutDisk.NewFolder(Mid(OutDir, 4))
    T = 1 : Shell.NameSpace(OutDir).CopyHere Items, 280
  End If
  Items.Filter 73888, "*"
  For Each Fd In Items : FFolder Fd.Path, T : Next
End Sub

3 (изменено: dmitriypopov86, 2015-09-11 13:42:24)

Re: VBS: Копирование файлов по списку. Сортировка по папкам.

Flasher пишет:

dmitriypopov86
Касаемо первый задачи:

Спасибо за отклик! Да задача одноразовая , один раз прочитали список и копировали необходимые файлы, на букву диска можно не смотреть - это необязательный параметр, очень принципиально что б скрипт был на vbs, на тотале я знаю, как сделать, но этот способ не подходит для общей автоматизации выполняемых задач. Хм...я что то не так наверное делаю, подставляю параметры и скрипт все время ругается что должно быть 3 параметра.  Подскажите путь к списку должен быть такого вида :  List = "D:\PL\tempout.txt" или List = fso.GetFile("D:\PL\tempout.txt") ?

4 (изменено: Flasher, 2015-09-11 19:50:53)

Re: VBS: Копирование файлов по списку. Сортировка по папкам.

dmitriypopov86 пишет:

на тотале я знаю, как сделать, но этот способ не подходит для общей автоматизации выполняемых задач.

На ТС есть CopyTree, она элементарно с этим справляется. Помимо этого есть утилита NTLinks Maker с наличием тихого режима, которая сохраняет место на диске, создавая вместо копий симлинки или жёсткие ссылки с возможностью сохранения относительной структуры выбранных в панели файлов.
Мой скрипт аналогично тянется на тулбар ТС и в редакцию кнопки вставляются указанные параметры в соответствующее поле. В самом скрипте править ничего не надо.
Вторая же задача с выбранными в панели файлами элементарно решается инструментом группового переименования, где в качестве маски пишется [N1-3]\[N].

5

Re: VBS: Копирование файлов по списку. Сортировка по папкам.

dmitriypopov86, пора бы уже выучить как оформляется заголовок темы.