| 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: 2229 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: 2229 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: 2229 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: 2229 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: 2229 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: 2229 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 
 
		 |