1 (изменено: dboa, 2015-01-19 19:01:23)

Тема: VBS: Создание дерева каталогов

Всем здравия

Нужен хелп.

Есть задача - В папке лежит скрипт, при его инициировании выводится диалоговое окно с предложением назвать папку(реализовал).Скрипт проверяет есть ли такая папка(реализовал). Папка создается в каталоге, где лежит скрипт(реализовал). А вот дальше уткнулся в нехватку знаний - не могу реализовать создание фиксированных подкаталогов во вновь созданном каталоге.

пример: test(вновь созданный каталог)\test2(подкаталог)\test3(подкаталог)

скрипт -что реализовано и работает:

Option Explicit
Dim objFSO, objFolder, objShell, strDirectory, strFolder2
strDirectory = InputBox("Ввести название папки:", "Создание папки.")
'Для кнопки Отмена или для пустого поля ввода
 If strDirectory=Empty Then
   WScript.Quit
 End If

Set objFSO = CreateObject("Scripting.FileSystemObject")
'Проверка на существование папки и создание.
If objFSO.FolderExists(strDirectory) Then
objFSO.CreateFolder strDirectory
WScript.Echo "Папка  ''"& strDirectory &"''  уже создана "
Else
Set objFolder = objFSO.CreateFolder(strDirectory)
'WScript.Echo "Вновь созданная папка ''"& strDirectory &"''."
End If


WScript.Quit

Если есть возможность выручайте

2

Re: VBS: Создание дерева каталогов

Header = Space(26) & "Создание папки-матёшки"
Path = InputBox(String(5, vbLf) & "Введите относительный путь:", Header, "New1\New2\New3")
If Trim(Path) = "" Then WScript.Quit
SFN = WScript.ScriptFullName
CreateObject("Shell.Application").NameSpace(Left(SFN, InStrRev(SFN, "\"))).NewFolder(Path)

3

Re: VBS: Создание дерева каталогов

dboa, добавьте в название темы префикс языка и оформите код тегом "code".

4 (изменено: dboa, 2015-01-19 18:59:24)

Re: VBS: Создание дерева каталогов

Flasher пишет:
Header = Space(26) & "Создание папки-матёшки"
Path = InputBox(String(5, vbLf) & "Введите относительный путь:", Header, "New1\New2\New3")
If Trim(Path) = "" Then WScript.Quit
SFN = WScript.ScriptFullName
CreateObject("Shell.Application").NameSpace(Left(SFN, InStrRev(SFN, "\"))).NewFolder(Path)

Спасибо за быстрый ответ:)

Интересный вариант но малость не то, то есть я дал плохой пример.  Есть определенный набор папок(неизменный) и родительские папки(Заводятся новые), так вот что бы каждый раз не создавать неизменные папки ручками и пытаюсь написать этот скрипт.
В вашем скрипте имена всех папок нужно заводить снова  каждый раз.

Правильный пример:
Родительский каталог(каждый раз новый)\
Неизменная 1
Неизменная 2
.....................
Неизменная 10

Вот как то так, извините, что ввел в заблуждение

5

Re: VBS: Создание дерева каталогов

Внесу, так сказать...


Set WshShell = CreateObject("WScript.Shell")
CurDir = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
ParentFolder = InputBox("Введите Имя родительского каталога:")
...
Проверки
...
Folders = """" & ParentFolder & "\Неизменная 1"" " & """" & ParentFolder & "\Неизменная 2"" " & """" & ParentFolder & "\Неизменная 3"" " &"""" & ParentFolder & "\Неизменная 4"" " & """" & ParentFolder & "\Неизменная 5"" " & """" & ParentFolder & "\Неизменная 6"" " & """" & ParentFolder & "\Неизменная 7"" " & """" & ParentFolder & "\Неизменная 8"" " & """" & ParentFolder & "\Неизменная 9"" " & """" & ParentFolder & "\Неизменная 10"""
WshShell.Run "cmd /c md " & Folders, 0, True
MsgBox "Ok"

В точности выполняет приведённый пример.
Метод "md" позволит не проверять наличие папок, а просто создать их, если их нет. Если есть - будет ошибка, но она не важна и не видна. Создадутся только отсутствующие каталоги, существующие не затронутся.
Ещё один несомненный плюс именно "md", а не FSO.CreateFolder в том, что md может сразу создавать с вложениями.
Есть нюанс. Если скрипт называется 1.vbs и лежит в папке c:\1.vbs\1.vbs, то будет ошибка. Но я этим пренебрегаю (для себя).

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

6

Re: VBS: Создание дерева каталогов

MikeSh то что доктор прописал ) Про md я и не подумал:) Огромная вам благодарность

7 (изменено: Flasher, 2015-01-20 02:54:28)

Re: VBS: Создание дерева каталогов

dboa пишет:

то есть я дал плохой пример

Это ещё мягко сказать.

Header = "          Создание папки с вложенными подпапками"
Name = Trim(InputBox(String(5, vbLf) & "Введите имя родительской папки:", Header, "NewFolder"))
If Name = "" Then WScript.Quit
Arr = Array("Приказы", "Кадры", "и т.д")
Set Shell = CreateObject("Shell.Application")
CD = CreateObject("WScript.Shell").CurrentDirectory
For Each N in Arr : Shell.NameSpace(CD).NewFolder(Name & "\" & N) : Next

8

Re: VBS: Создание дерева каталогов

Flasher пишет:
dboa пишет:

то есть я дал плохой пример

Это ещё мягко сказать.

Count = 10 ' Количество подпапок
Header = "       Создание папки с " & Count & " вложенными подпапками"
Name = Trim(InputBox(String(5, vbLf) & "Введите имя родительской папки:", Header, "NewFolder"))
If Name = "" Then WScript.Quit
Set Shell = CreateObject("Shell.Application")
CD = CreateObject("WScript.Shell").CurrentDirectory
For i = 1 To Count
  Shell.NameSpace(CD).NewFolder(Name & "\Неизменная " & i)
Next

Спасибо второй раз:)
Каюсь, второй плохой пример
Надо было сразу указывать реальные названия папок, а я по привычке как в алгебре
Неизменная 1 = Приказы, Неизменная 2 = Кадры и т.д. поэтому их надо фиксировано в скрипте прописывать.

9

Re: VBS: Создание дерева каталогов

Нет проблем, поправил.
P.S.: нет никакого смысла цитировать предыдущие посты.

10

Re: VBS: Создание дерева каталогов

Flasher

Благодарен за оперативную помощь, сам бы точно еще пару дней провозился