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: Tue Jun 23, 2009 16:20    Post subject: Reply with quote

natalja
vbs-скрипт:
Code:
'====================================================================================
' Переименование и перемещение файлов или папок согласно Excel-файла.
'   Столбцы в таблице - Имя1, Имя2, Категория, Путь, Статус.

' Параметры скрипта:
'   {excel-файл}
'====================================================================================
Option Explicit
'=============== Изменяемые параметры ===============================================
Const StartCell = "A2" 'Первая ячейка таблицы
'====================================================================================

Dim FSO, WSH, Mess, XlsFile, FF, Path, FPath, FNewPath, Status, objXL, i, j
Set FSO   = CreateObject("Scripting.FileSystemObject")
Set WSH   = CreateObject("WScript.Shell")
Set objXL = CreateObject("Excel.Application")
Set FF    = CreateObject("Scripting.Dictionary")

MessDefine
CheckParams

objXL.Workbooks.Open XlsFile
i = objXL.Range(StartCell).Row
j = objXL.Range(StartCell).Column

Do
  Path     = GetPath(Trim(objXL.Cells(i,j+3).Value)) & "\"
  FPath    = Path  & Trim(objXL.Cells(i,j+1).Value)
  Path     = Path  & Trim(objXL.Cells(i,j+2).Value)  & "\"
  FNewPath = Path  & Trim(objXL.Cells(i,j  ).Value)
  If Not FF.Exists(FPath) Then
    If FExists(FPath) Then
      If Not FExists(FNewPath) Then
        BuildTree(Path)
        On Error Resume Next
        FMove FPath, FNewPath
        If Err.Number = 0 Then
          Status = Mess(6)
        Else
          Status = Err.Description
        End If
        On Error GoTo 0
      Else
        Status = Mess(5)
      End If
    Else
      Status = Mess(4)
    End If
  Else
    Status = Mess(3)
  End If
  FF.Add FPath, Status
  objXL.Cells(i,j+4).Value = Status
  i = i + 1
Loop Until objXL.Cells(i,j).Value = ""

'Сохранение результатов
objXL.Application.ActiveWorkbook.Save
objXL.Quit()

MsgBox Mess(7), vbInformation + vbOKOnly, Mess(0)
Quit

'===== Процедуры и функции ===============================================================
'Проверка входных параметров
Sub CheckParams
  With WScript
    If .Arguments.Count = 0 Then
      MsgBox Mess(1), vbCritical + vbOKOnly, Mess(0)
      Quit
    End If
    XlsFile = GetPath(.Arguments(0))
    If Not FSO.FileExists(XlsFile) Then
      MsgBox Mess(2), vbCritical + vbOKOnly, Mess(0)
      Quit
    End If
  End With
End Sub

'Путь
Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function

'Существование файла или папки
Function FExists(pPath)
  FExists = FSO.FileExists(pPath) Or FSO.FolderExists(pPath)
End Function

'Перемещение файла или папки
Function FMove(pPath, pNewPath)
  If FSO.FileExists(pPath)   Then FSO.MoveFile   pPath, pNewPath
  If FSO.FolderExists(pPath) Then FSO.MoveFolder pPath, pNewPath
End Function

'Создание дерева папок
Sub BuildTree(pFolder)
  Dim lPF
  lPF = FSO.GetParentFolderName(pFolder)
  If Not FSO.FolderExists(lPF) Then
    BuildTree(lPF)
  Else
    If Not FSO.FolderExists(pFolder) Then FSO.CreateFolder pFolder
  End If
End Sub

'Описание сообщений
Sub MessDefine
  Set Mess = CreateObject("Scripting.Dictionary")
  With Mess
    .Add 0,  "Переименование и перемещение согласно Excel-файла"
    .Add 1,  "Не указаны параметры!"
    .Add 2,  "Excel-файл не существует!"
    .Add 3,  "Повторное вхождение в список"
    .Add 4,  "Исходный файл или папка не существует"
    .Add 5,  "Уже существует целевой файл или папка с требуемым именем"
    .Add 6,  "Успешное выполнение"
    .Add 7,  "Операция завершена."
  End With
End Sub

'Выход
Sub Quit
  Set objXL = Nothing
  Set FF    = Nothing
  Set Mess  = Nothing
  Set WSH   = Nothing
  Set FSO   = Nothing
  WScript.Quit
End Sub

Сохрани код в текстовый файл с расширением vbs. Перетащи получившийся файл на панель TC - получится кнопка.
Затем 2 варианта:
1. Либо на кнопке нажми правую кнопку мыши -> Изменить. В строке "Параметры" напиши полный путь к Excel-файлу -> ОК. Нажми кнопку.
2. Либо просто перетащи Excel-файл на эту кнопку.

В Excel-файле должно быть 4 заполненных колонки - Имя1, Имя2, Категория, Путь. После выполнения операции будет заполнена 5-я колонка Статус.
Внимание! В момент выполнения скрипта Excel-файл НЕ должен быть открыт.
_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Wed Jun 24, 2009 14:19; edited 1 time in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group