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
Batya



PostPosted: Wed Feb 13, 2013 18:10    Post subject: Reply with quote

Petr_Ch wrote:
Batya
Выделять пробовал самые разные папки. Не помогает.


Хм... Да, были косяки.
Переписал скрипт полностью:
Code:
'======================================================================
' Для каждой папки из файла-списка перемещаются и переименовываются
' вложенные файлы - {Имя выделенной папки}_{Имя файла}.{Расширение}
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'======================================================================
Option Explicit
Dim EXT
Set EXT = CreateObject("Scripting.Dictionary")
'========== Изменяемые параметры ======================================
Const BasePath = "C:\Temp\" 'Пусть для перемещения файлов
'Массив расширений обрабатываемых файлов
EXT.Add "jpg", ""
EXT.Add "tif", ""
'======================================================================

Dim FSO, FF, F, SF

With WScript
  If .Arguments.Count = 0 Then
    MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Перемещение вложенных файлов"
    .Quit
  End If
  FF = .Arguments(0)
End With

Set FSO = CreateObject("Scripting.FileSystemObject")

With FSO.OpenTextFile(FF, 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FolderExists(F) Then
        On Error Resume Next
        MoveFromFolder FSO.GetFolder(F), F
        Err.Clear
        On Error GoTo 0
      End If
    End If
  Loop
  .Close
End With

Set FSO = Nothing
Set EXT = Nothing
WScript.Quit

Sub MoveFromFolder(pSubFolder, pFolder)
  Dim lF
  For Each lF In pSubFolder.Files
    MoveFile lF, pFolder
  Next
  For Each lF In pSubFolder.SubFolders
    MoveFromFolder lF, pFolder
  Next
End Sub

Sub MoveFile(pFile, pFolder)
  Dim lF, lE
  lF = BasePath & FSO.GetBaseName(pFolder) & "_" & pFile.Name
  lE = LCase(FSO.GetExtensionName(pFile.Path))
  If EXT.Exists(lE) Then FSO.MoveFile pFile.Path, lF
End Sub

Выделять нужно папки. Уровень вложенности у папок может быть любой. Новые имена файлов получают приставку именно от имён выделенных папок (если не удобно, могу переделать).
_________________
Нет, я не сплю. Я просто медленно моргаю.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group