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 

Single Post  Topic: Перемещение файлов с учетом размера и без учета расширения 
Author Message
Flasher



PostPosted: Thu Jan 23, 2014 09:51    Post subject: Reply with quote

gendalv wrote:
Структура папок/имена папок одинаковы (пути файлов совпадают)
т.е. нужно сравнивать/перемещать из: d:\папка 1\подпапка a\подпапка b\файл в d:\папка 2\подпапка a\подпапка b\файл
По логике должны совпасть только относительные пути, но никак не абсолютные. Чем в данном случае являются пробелы?
И запись разве не так должна выглядеть?:
Quote:
d:\папка 1\подпапка\a\подпапка\b\файл в d:\папка 2\подпапка\a\подпапка\b\файл


В общем, если я правильно понял задачу, то vbs:
Code:
'=============================================================================
' Замена в получателе на меньшие по размеру выбранные файлы
' или файлы из аналогичной структуры выбранных каталогов без учёта расширения
' с перемещением бОльших файлов из получателя в корзину

' Условие: путь запуска пустой
' Параметры: %WL "<Путь получателя>"
'=============================================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : Target = .Item(1)
End With : If Right(Target, 1) <> "\" Then Target = Target & "\"

Set SHA = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
LDir = Len(CreateObject("WScript.Shell").CurrentDirectory) + 2
Set Basket = SHA.Namespace(&Ha&) : Set Items = SHA.NameSpace(Target).Items

For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1,-1).ReadAll, vbNewLine)
  If Trim(F) > vbNullString Then
    If FSO.FolderExists(F) Then ForFolder FSO.GetFolder(F) Else ForFile F, Items, Target
  End If
Next : Set Items = Nothing : Set Basket = Nothing : Set FSO = Nothing : Set SHA = Nothing

Sub ForFolder(Folder)
  For Each Fl In Folder.SubFolders : ForFolder Fl : Next
  TF = Target & Mid(Folder, LDir) & "\"
  If FSO.FolderExists(TF) Then
    Set Itms = SHA.NameSpace(TF).Items
    For Each Fl In Folder.Files : ForFile Fl, Itms, TF : Next
  End If
End Sub

Sub ForFile(File, Elems, T)
  Elems.Filter 192, FSO.GetBaseName(File) & ".*"
  If Elems.Count = 1 Then
    Set I = Elems.Item(0)
    If FSO.GetFile(File).Size < I.Size Then
      Basket.MoveHere I, 24 : FSO.MoveFile File, T
    End If
  End If
End Sub

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


Powered by phpBB © 2001, 2005 phpBB Group