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 

Создание папок по списку из текстового файла
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Premix



Joined: 28 May 2009
Posts: 6

Post (Separately) Posted: Mon Jan 31, 2011 15:23    Post subject: Создание папок по списку из текстового файла Reply with quote

В теме Создание папок по списку из указанного файла было показано создание папок из файла с расширением lst.
А можно создать дерево папок, из файла с раширением txt?
К примеру такой:
Code:

[Система]
 
Резервное копирование
Диагностика
Мониторинг
Настройка
Восстановление
 
[Интернет]

Браузеры
Офф-лайн браузеры
Веб ускорители
Анти-спам

[Текст]

Редакторы
Дополнения к Офису
Перевод и распознавание
Текст

Чтобы было вот так:
Code:

Система
            Резервное копирование
            Диагностика
            Мониторинг
            Настройка
            Восстановление
Интернет
            Браузеры
            Офф-лайн браузеры
            Веб ускорители
            Анти-спам
Текст
            Редакторы
            Дополнения к Офису
            Перевод и распознавание
            Текст
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2220
Location: Москва, Россия

Post (Separately) Posted: 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
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jan 31, 2011 16:10    Post subject: Reply with quote

Code:
' "C:\Путь\Файл-список.txt" "%P"
Я бы "%T" написал, без "%P" же и так будет работать.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2220
Location: Москва, Россия

Post (Separately) Posted: Mon Jan 31, 2011 16:24    Post subject: Reply with quote

Flasher
Да, какая разница?
Я же написал:
Batya wrote:
Пример параметров при вызове из TC:

При желании можно указать что угодно.
Может, автору темы выгодней такие параметры:
"%P%N" "C:\Папка"
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jan 31, 2011 16:33    Post subject: Reply with quote

Batya
Разница только в том, что не имеет смысла подобный пример приводить, чтобы с толку не сбить пользователя. Иначе он будет писать этот %P, когда он там вовсе не нужен.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2220
Location: Москва, Россия

Post (Separately) Posted: Mon Jan 31, 2011 16:52    Post subject: Reply with quote

Flasher wrote:
Иначе он будет писать этот %P, когда он там вовсе не нужен.

Если создавать кнопку перетаскиванием скрипта на панель, то для работы скрипта нужно прописать, как минимум, один параметр. Пользователю, может быть, проще прописать второй параметр, нежели очищать "Путь запуска".
И, вообще, я, как автор, имею право на собственные примеры. Параметр %P я указал, как наиболее часто употребимый.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Premix



Joined: 28 May 2009
Posts: 6

Post (Separately) Posted: Mon Jan 31, 2011 17:03    Post subject: Reply with quote

Batya Большое спасибо. Но разъясните пожалуйста:
Создал файл с расширением vbs, скопировал код, вставил, сохранил.
Перетащил на панель TC. В строке Параметры: %P
Файл-список.txt под курсором - жму созданную кнопку. Ошибка.
Как надо правильно?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jan 31, 2011 17:10    Post subject: Reply with quote

Batya wrote:
Пользователю, может быть, проще прописать второй параметр, нежели очищать "Путь запуска".
Глупость. Зачем было тогда CurrentDirecroty в коде применять?
Batya wrote:
И, вообще, я, как автор, имею право на собственные примеры.
Имеешь и тебя никто не заставляет, а пишет только своё мнение, как бы он сделал, чтобы ... (уже пояснял что).
Premix wrote:
В строке Параметры: %P

Файл-список.txt под курсором - жму созданную кнопку.
При таком раскладе надо было в параметрах указывать: %P%N либо %P%N "%T"
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2220
Location: Москва, Россия

Post (Separately) Posted: Mon Jan 31, 2011 17:23    Post subject: Reply with quote

Flasher wrote:
Глупость. Зачем было тогда CurrentDirecroty в коде применять?

Да с чего ты решил, что, удобный для тебя вариант обязательно будет также удобен другим?!

Flasher wrote:
Имеешь и тебя никто не заставляет, а пишет только своё мнение, как бы он сделал, чтобы ... (уже пояснял что).

А мне кажется, что передёргивать автора на примерах, а не на реализации - не совсем корректно. Предложи свой вариант реализации, тогда и будет, что обсудить.

Flasher wrote:
Premix писал(а):
В строке Параметры: %P

Файл-список.txt под курсором - жму созданную кнопку.

Это откуда цитировано? Где "Premix писал(а)"?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jan 31, 2011 17:30    Post subject: Reply with quote

Batya wrote:
Да с чего ты решил, что, удобный для тебя вариант обязательно будет также удобен другим?!
Да это ты такой вариант предложил в скрипте. Я только пояснение даю.
Batya wrote:
А мне кажется, что передёргивать автора на примерах, а не на реализации - не совсем корректно. Предложи свой вариант реализации, тогда и будет, что обсудить.
Тут дело не в передёргивании, а в указании на нюансы для юзера. А зачем мне предлагать другие варианты, если твой рабочий? Замени
Code:
If .Arguments.Count > 1 Then
    CurrentFolder = .Arguments(1)
  Else
    CurrentFolder = CreateObject("WScript.Shell").CurrentDirectory
  End If
на CurrentFolder = .Arguments(1), и лишних разговоров - ноль.
Batya wrote:
Это откуда цитировано? Где "Premix писал(а)"?
Как это где? См. выше.
Back to top
View user's profile Send private message
Premix



Joined: 28 May 2009
Posts: 6

Post (Separately) Posted: Mon Jan 31, 2011 17:44    Post subject: Reply with quote

Flasher wrote:
При таком раскладе надо было в параметрах указывать: %P%N либо %P%N "%T"

С параметром %P%N выскакивает окно с ошибкой
Code:

Сценарий:   D:PrоЬаЗ\ТСРU v51\scripts\Создание_папок.vbs
Строка: 51
Символ: 39
Ошибка: Недопустимое имя или номер файла
Код: 800А0034
Источник:   Ошибка выполнения Microsoft VBScript

И папки не создаются. А с параметром %P%N "%T" выскакивает такая же ошибка,но после нажатия "ОК" папки создаются
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jan 31, 2011 17:55    Post subject: Reply with quote

Premix
Файл-список при этом под курсором? Всё должно работать без проблем.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2220
Location: Москва, Россия

Post (Separately) Posted: Mon Jan 31, 2011 18:03    Post subject: Reply with quote

Flasher wrote:
Замени
Код:
If .Arguments.Count > 1 Then
CurrentFolder = .Arguments(1)
Else
CurrentFolder = CreateObject("WScript.Shell").CurrentDirectory
End If
на CurrentFolder = .Arguments(1), и лишних разговоров - ноль.

А вот это мне решать. Если не хочешь использовать теукщую папку, указывай второй параметр.

Flasher wrote:
Как это где? См. выше.

Хм. Не заметил.

Premix wrote:
Ошибка: Недопустимое имя или номер файла

Скорее всего на одной из строк находится набор символов, по которому нельзя создать файл - недопустимые символы. Если текстовый файл небольшой, приведи его реальное содержимое.

Premix wrote:
Перетащил на панель TC. В строке Параметры: %P
Файл-список.txt под курсором - жму созданную кнопку. Ошибка.
Как надо правильно?

У скрипта должно быть 2 параметра:
1. Путь к текстовому файлу, по которому создаются папки.
2. Путь к папке, в которой будут создаваться новые папки.
Любой из параметров можно задать жестко, а можно и с помощью специальных параметров TC - %P, %N, %T, %M и т.п. При этом надо учитывать, что путь, содержащий пробелы, должен быть заключён в кавычки. Исключение - конструкции %N, %P%N, %T%M заключать в кавычки не надо - TC самостоятельно добавляет обрамляющие кавычки.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jan 31, 2011 18:16    Post subject: Reply with quote

Batya wrote:
А вот это мне решать.
Тебя не понять, то пишешь "Предложи свой вариант реализации", то "мне решать"...
Batya wrote:
У скрипта должно быть 2 параметра
А где в условии скрипта прописано, что только с двумя параметрами будет работать? А то я заметил, что с одним в текущей папке каталоги не создаются. Странно..
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2220
Location: Москва, Россия

Post (Separately) Posted: Mon Jan 31, 2011 18:30    Post subject: Reply with quote

Flasher wrote:
Тебя не понять, то пишешь "Предложи свой вариант реализации", то "мне решать"...

Я говорил про реализацию. Перефразирую: "Поскольку я автор скрипта, то мне решать, что указать в описании. Создай собственный скрипт, тода будет, что обсудить."

Flasher wrote:
А где в условии скрипта прописано, что только с двумя параметрами будет работать?

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


Flasher wrote:
А то я заметил, что с одним в текущей папке каталоги не создаются. Странно..

Отсюда подробней. Покажи кнопку, содержимое файла и как запускается скрипт.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group