Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] wsh-скрипт для создания сетевой папки (http://forum.oszone.net/showthread.php?t=182496)

vdereberya 09-08-2010 14:00 1469999

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

deepred 09-08-2010 15:14 1470051

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 1470057

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

vitaliyboch 09-08-2010 15:33 1470064

так нужно так и указать:
Код:

StrDSTFolder  =  "\\Server\Folder\" ' Некая папка на сервере
а запускать с компьютеров

vdereberya 09-08-2010 15:42 1470070

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

deepred 09-08-2010 16:02 1470082

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 1470146

Спасибо!

vdereberya 09-08-2010 18:22 1470194

а как решить: при нажатии кнопки «Отмена» пишет «ошибка: Требуется объект objSubFolder» ?

deepred 09-08-2010 18:31 1470200

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 1470213

Даже не знаю как благодарить! Огромное спасибо!

Iska 09-08-2010 22:08 1470326

Здесь неточность:
читать дальше »
Цитата:

Цитата deepred
Код:

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 1470333

Iska,

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


Время: 20:34.

Время: 20:34.
© OSzone.net 2001-