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: Mon Jan 31, 2011 15:51    Post subject: Reply with quote

vbs:
Code:
'=====================================================================
' Создание дерева папок из текстового файла вида
' [Родительская папка 1]
'    Дочерняя папка 1
'    ...
'    Дочерняя папка N1
'    ...
' [Родительская папка M]
'    Дочерняя папка 1
'    ...
'    Дочерняя папка NN

' Параметры:
' {файл-список} [{текущая папка}]

' Пример параметров при вызове из TC:
' "C:\Путь\Файл-список.txt" "%P"
'=====================================================================
Option Explicit
Dim CharArr
'======== Изменяемые параметры =======================================
'Массив недопустимых символов имени. Заменяем их указанным ниже символом
CharArr = Split("\ / * ? "" < > | :")
'Символ для замены недопустимого символа
Const ReplaceChar = " "
'Признак автоматической замены недопустимых символов: True\False
Const AutoReplace = False
'=====================================================================

Dim FSO, FF, F, CurrentFolder, ParentFolder, Errors
Set FSO = CreateObject("Scripting.FileSystemObject")

With WScript
  FF = .Arguments(0)
  If .Arguments.Count > 1 Then
    CurrentFolder = .Arguments(1)
  Else
    CurrentFolder = CreateObject("WScript.Shell").CurrentDirectory
  End If
End With
If Right(CurrentFolder, 1) <> "\" Then CurrentFolder = CurrentFolder + "\"

With FSO.OpenTextFile(FF, 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If AutoReplace Then F = Trim(ReplaceInadmissibleChars(F))
      If CheckInadmissibleChars(F) Then
        If InStr(F, "[") > 0 Then
          Errors = Errors & vbNewLine & F
        Else
          Errors = Errors & vbNewLine & "[" & ParentFolder & "] -> " & F
        End If
      Else
        If InStr(F, "[") > 0 Then
          ParentFolder = Trim(Mid(F, 2, Len(F) - 2))
          CreateFolder CurrentFolder & ParentFolder
        Else
          CreateFolder CurrentFolder & ParentFolder & "\" & F
        End If
      End If
    End If
  Loop
End With

If Len(Errors) > 0 Then _
  MsgBox "Следующие папки невозможно создать, т.к. в их именах указаны недопустимые символы " &_
         "(""" & Join(CharArr) & """):" & vbNewLine & Errors, _
         vbInformation + vbOKOnly, "Создание дерева папок"

Set FSO = Nothing
Wscript.Quit()

Sub CreateFolder(pPath)
  If Not FSO.FolderExists(pPath) Then FSO.CreateFolder(pPath)
End Sub

Function ReplaceInadmissibleChars(pText)
  Dim lC
  ReplaceInadmissibleChars = pText
  For Each lC In CharArr
    ReplaceInadmissibleChars = Replace(ReplaceInadmissibleChars, lC, ReplaceChar)
  Next
End Function

Function CheckInadmissibleChars(pText)
  Dim lC
  CheckInadmissibleChars = False
  If Not AutoReplace Then
    For Each lC In CharArr
      If InStr(pText, lC) Then
        CheckInadmissibleChars = True
        Exit Function
      End If
    Next
  End If
End Function

Текущая папка для создания дерева задаётся вторым параметром скрипта или используется текущая папка кнопки\команды (параметр "Путь запуска").
_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Tue Feb 01, 2011 15:33; edited 3 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group