Войти

Показать полную графическую версию : [решено] wsh-скрипт для создания сетевой папки


vdereberya
09-08-2010, 14:00
Добрый день. Очень нужна ваша помощь!!! Не могу разобраться с такой проблемой: есть сеть в которой пользователи, удаленно на сервере, в определенной папке (скажем \\server\ user\) имеют возможность создавать каталоги. Нужен wsh-скрипт (или может что другое) который выводил бы диалог с пользователем с запросом имени создаваемой папки, и далее создавал на сервере в указанном каталоге папку с введенном именем и + в ней еще 5 заранее предусмотренных папок (перечень вложенных папок всегда один и тот же). Возможно есть что-то похожее в примерах – не могу найти, а самому написать пока слабо :(

deepred
09-08-2010, 15:14
vdereberya,

Так условиями задачи не предусматривается ни подключение, ни расшаривание папок на
удаленном ПК, то предполагаю что папка доступна как сетевой диск и решение будет такое:
Dim input, StrDSTFolder, StrLoctFolder

ArrSubFolders = Array("Folder1", "Folder2", "Folder3", "Folder4", "Folder5")
' Перечень вложенных папок
Input = InputBox("Введите имя папки")

StrDSTFolder = "F:\" ' Некая папка на сервере
StrLoctFolder = StrDSTFolder & Input & "\"

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace(StrDSTFolder)
objFolder.NewFolder(Input)

Wscript.Sleep 3000

Set objSubFolder = objShellApp.NameSpace(StrLoctFolder)
For Each StrSubFolder In ArrSubFolders
objSubFolder.NewFolder(StrSubFolder)
Next

Wscript.Quit 0

vdereberya
09-08-2010, 15:24
deepred огромное спасибо за код!!! Хочу только уточнить как бить если серверная папка не подключена как сетевой диск, а просто доступна по сети (напр. \\server\ user\) Чтение/запись в папку для пользователей - разрешено.

vitaliyboch
09-08-2010, 15:33
так нужно так и указать:
StrDSTFolder = "\\Server\Folder\" ' Некая папка на сервере
а запускать с компьютеров

vdereberya
09-08-2010, 15:42
Гениально! Огромное спасибо! А для того что бы в директории например «Folder1» создать еще подуровень, что нужно?

deepred
09-08-2010, 16:02
vdereberya,

приведенный код уже содержал ответ на Ваш вопрос, но тем не менее:

Dim input, StrDSTFolder, StrLoctFolder, StrDp2LoctFolder

ArrSubFolders = Array("Folder1", "Folder2", "Folder3", "Folder4", "Folder5")
Input = InputBox("Введите имя папки")

StrDSTFolder = "F:\"
StrLoctFolder = StrDSTFolder & Input & "\"

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace(StrDSTFolder)
objFolder.NewFolder(Input)

Wscript.Sleep 3000

Set objSubFolder = objShellApp.NameSpace(StrLoctFolder)
For Each StrSubFolder In ArrSubFolders
objSubFolder.NewFolder(StrSubFolder)

IF ArrSubFolders(0) = StrSubFolder Then
StrDp2LoctFolder = StrLoctFolder & ArrSubFolders(0) & "\"
Set objSubDp2Folder = objShellApp.NameSpace(StrDp2LoctFolder)
objSubDp2Folder.NewFolder("Dp2LoctFolder") ' В Folder1 вкладываем один каталог
End if

Next

Wscript.Echo "D O N E"
Wscript.Quit 0

vdereberya
09-08-2010, 17:26
Спасибо!

vdereberya
09-08-2010, 18:22
а как решить: при нажатии кнопки «Отмена» пишет «ошибка: Требуется объект objSubFolder» ?

deepred
09-08-2010, 18:31
vdereberya,

Нужно подредактировать начало сценария:

On Error resume Next
Dim input, StrDSTFolder, StrLoctFolder, StrDp2LoctFolder
ArrSubFolders = Array("Folder1", "Folder2", "Folder3", "Folder4", "Folder5")
Input = InputBox("Введите имя папки")

If IsEmpty(input) Then
WScript.Quit 0
End if

.........

vdereberya
09-08-2010, 18:48
Даже не знаю как благодарить! Огромное спасибо!

Iska
09-08-2010, 22:08
Здесь неточность:On Error resume Next

If input is nothing Then
Wscript.Quit 0
End if

с «Nothing» можно сравнивать только объекты. Здесь же «input» — простая переменная, при нажатии кнопки «Отмена» принимающая пустое значение («Empty»):
input = InputBox("Введите имя папки")
WScript.Echo TypeName(input)

Empty
На мой взгляд, «On Error resume Next» здесь не требуется и достаточно будет аналогичной проверки:

input = InputBox("Введите имя папки")

If IsEmpty(input) Then
WScript.Quit 0
End if

deepred
09-08-2010, 22:21
Iska,

Да, совершенно верно - поторопился, спасибо за замечание... Сценарий обновил по Вашему совету...




© OSzone.net 2001-2012