View previous topic :: View next topic |
Author |
Message |
Premix
Joined: 28 May 2009 Posts: 6
|
(Separately) Posted: Mon Jan 31, 2011 15:23 Post subject: Создание папок по списку из текстового файла |
|
|
В теме Создание папок по списку из указанного файла было показано создание папок из файла с расширением lst.
А можно создать дерево папок, из файла с раширением txt?
К примеру такой:
Code: |
[Система]
Резервное копирование
Диагностика
Мониторинг
Настройка
Восстановление
[Интернет]
Браузеры
Офф-лайн браузеры
Веб ускорители
Анти-спам
[Текст]
Редакторы
Дополнения к Офису
Перевод и распознавание
Текст |
Чтобы было вот так:
Code: |
Система
Резервное копирование
Диагностика
Мониторинг
Настройка
Восстановление
Интернет
Браузеры
Офф-лайн браузеры
Веб ускорители
Анти-спам
Текст
Редакторы
Дополнения к Офису
Перевод и распознавание
Текст |
|
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Mon Jan 31, 2011 15:51 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jan 31, 2011 16:10 Post subject: |
|
|
Code: | ' "C:\Путь\Файл-список.txt" "%P" | Я бы "%T" написал, без "%P" же и так будет работать. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Mon Jan 31, 2011 16:24 Post subject: |
|
|
Flasher
Да, какая разница?
Я же написал:
Batya wrote: | Пример параметров при вызове из TC: |
При желании можно указать что угодно.
Может, автору темы выгодней такие параметры:
"%P%N" "C:\Папка" _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jan 31, 2011 16:33 Post subject: |
|
|
Batya
Разница только в том, что не имеет смысла подобный пример приводить, чтобы с толку не сбить пользователя. Иначе он будет писать этот %P, когда он там вовсе не нужен. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Mon Jan 31, 2011 16:52 Post subject: |
|
|
Flasher wrote: | Иначе он будет писать этот %P, когда он там вовсе не нужен. |
Если создавать кнопку перетаскиванием скрипта на панель, то для работы скрипта нужно прописать, как минимум, один параметр. Пользователю, может быть, проще прописать второй параметр, нежели очищать "Путь запуска".
И, вообще, я, как автор, имею право на собственные примеры. Параметр %P я указал, как наиболее часто употребимый. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Premix
Joined: 28 May 2009 Posts: 6
|
(Separately) Posted: Mon Jan 31, 2011 17:03 Post subject: |
|
|
Batya Большое спасибо. Но разъясните пожалуйста:
Создал файл с расширением vbs, скопировал код, вставил, сохранил.
Перетащил на панель TC. В строке Параметры: %P
Файл-список.txt под курсором - жму созданную кнопку. Ошибка.
Как надо правильно? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jan 31, 2011 17:10 Post subject: |
|
|
Batya wrote: | Пользователю, может быть, проще прописать второй параметр, нежели очищать "Путь запуска". | Глупость. Зачем было тогда CurrentDirecroty в коде применять? Batya wrote: | И, вообще, я, как автор, имею право на собственные примеры. | Имеешь и тебя никто не заставляет, а пишет только своё мнение, как бы он сделал, чтобы ... (уже пояснял что). Premix wrote: | В строке Параметры: %P
Файл-список.txt под курсором - жму созданную кнопку. | При таком раскладе надо было в параметрах указывать: %P%N либо %P%N "%T" |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Mon Jan 31, 2011 17:23 Post subject: |
|
|
Flasher wrote: | Глупость. Зачем было тогда CurrentDirecroty в коде применять? |
Да с чего ты решил, что, удобный для тебя вариант обязательно будет также удобен другим?!
Flasher wrote: | Имеешь и тебя никто не заставляет, а пишет только своё мнение, как бы он сделал, чтобы ... (уже пояснял что). |
А мне кажется, что передёргивать автора на примерах, а не на реализации - не совсем корректно. Предложи свой вариант реализации, тогда и будет, что обсудить.
Flasher wrote: | Premix писал(а):
В строке Параметры: %P
Файл-список.txt под курсором - жму созданную кнопку. |
Это откуда цитировано? Где "Premix писал(а)"? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jan 31, 2011 17:30 Post subject: |
|
|
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 |
|
|
Premix
Joined: 28 May 2009 Posts: 6
|
(Separately) Posted: Mon Jan 31, 2011 17:44 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jan 31, 2011 17:55 Post subject: |
|
|
Premix
Файл-список при этом под курсором? Всё должно работать без проблем. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Mon Jan 31, 2011 18:03 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jan 31, 2011 18:16 Post subject: |
|
|
Batya wrote: | А вот это мне решать. | Тебя не понять, то пишешь "Предложи свой вариант реализации", то "мне решать"... Batya wrote: | У скрипта должно быть 2 параметра | А где в условии скрипта прописано, что только с двумя параметрами будет работать? А то я заметил, что с одним в текущей папке каталоги не создаются. Странно.. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2220 Location: Москва, Россия
|
(Separately) Posted: Mon Jan 31, 2011 18:30 Post subject: |
|
|
Flasher wrote: | Тебя не понять, то пишешь "Предложи свой вариант реализации", то "мне решать"... |
Я говорил про реализацию. Перефразирую: "Поскольку я автор скрипта, то мне решать, что указать в описании. Создай собственный скрипт, тода будет, что обсудить."
Flasher wrote: | А где в условии скрипта прописано, что только с двумя параметрами будет работать? |
Здесь:
Batya wrote: | ' Параметры:
' {файл-список} [{текущая папка}] |
Flasher wrote: | А то я заметил, что с одним в текущей папке каталоги не создаются. Странно.. |
Отсюда подробней. Покажи кнопку, содержимое файла и как запускается скрипт. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
|
|
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
|