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

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

balzaman 23-03-2011 18:27 1642138

vbs скрипт - создание папки
 
здравствуйте
есть скрипт создания новой папки (нашел на данном форуме)
---
On Error Resume Next
Dim Message, fso, Text, FolderName, FileName, Title
Message = "Введите название:"
Title = "Создание папки"
'создаем объект FileSystemObject в переменную fso
Set fso = CreateObject("Scripting.FileSystemObject")
FolderName = InputBox(Message, Title)
Set Fldr = fso.CreateFolder ("" & FolderName)
---
есть расширение QTTabBar (панель, встраиваемая в Windows Explorer), в ней можно
создавать дополнительные кнопки
создаю кнопку (ссылающуюся на данный скрипт)
скрипт выполняется и создается папка в том каталоге в котором находится данный
скрипт
задача
изменить / дополнить скрипт так, чтобы папка создавалась в каталоге из которого он
вызван (кнопкой QTTabBar)
и, чтобы за тем созданный каталог был выделен в Windows Explorer
возможно ли данное решение?
если можно, подскажите аналогичный скрипт для создания текстового файла
заранее благодарен за помощь

OSArev 23-03-2011 22:31 1642316

Цитата:

Цитата balzaman
чтобы папка создавалась в каталоге из которого он
вызван (кнопкой QTTabBar) »

, насчёт этого не знаю, а для
Цитата:

Цитата balzaman
чтобы папка создавалась в каталоге из которого он
вызван »

, сейчас проверил: скрипт лежит на Столе, а вызывал из другой папки - создаёт папку в папке из которой вызывался.
Вот немного расширенный скрипт:
Код:

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

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

If err.number = vbEmpty then
Set objShell = CreateObject("WScript.Shell")
objShell.run ("Explorer" &" " & strDirectory & "\" )
Else
WScript.echo "Ошибка vbscript: " & err.number
End If

WScript.Quit

Цитата:

Цитата balzaman
аналогичный скрипт для создания текстового файла »

Код:

Dim FSO, MyFile
 
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set WshShell = WScript.CreateObject("WScript.Shell")

  FileName=Inputbox("Введите имя:","Создание текстового документа.")
'Для кнопки Отмена или для пустого поля ввода
 If FileName=Empty Then
  WScript.Quit
 End If

'Проверка на существование файла и создание.
'Добавил открытие файла
 If FSO.FileExists(FileName & ".txt") Then
    WScript.Echo "Документ  ''"& FileName & ".txt" & "'' - уже существует."
 WshShell.Run("Explorer" &" " & FileName & ".txt")
    WScript.Quit 0
  Else
    fso.CreateTextFile(FileName & ".txt")
  End If
 WshShell.Run("Explorer" &" " & FileName & ".txt")


balzaman 24-03-2011 10:38 1642645

Цитата:

Цитата OSArev
, сейчас проверил: скрипт лежит на Столе, а вызывал из другой папки - создаёт папку в папке из которой вызывался. »

спасибо!
всё работает супер, но...
объекты создаются в каталоге, в котором они расположены
например скрипт лежит на рабочем столе, открываем какую либо папку, создаем в ней ярлык на данный скрипт, запускаем - итог, объект создан на рабочем столе, а не в папке из которой он вызван :(
а нужно именно данное действие (создание объекта в папке вызова)
сторку созания текстового файла
WshShell.Run("Explorer" &" " & FileName & ".txt") подправил на
WshShell.Run("Notepad" &" " & FileName & ".txt")
и еще нюанс
как изменить скрипт, чтобы объект создавался в каталоге вызова (ярлыком) и был просто выделен, а не открыт

OSArev 24-03-2011 13:31 1642790

А из контекстного меню?
Если Windows 7 можно из контекстного меню. Reg-файл для папки
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новая папка]

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новая папка\command]
@="WScript C:\\Users\\999\\Desktop\\001.vbs \"%V\""

Путь укажи свой.
Цитата:

Цитата balzaman
как изменить скрипт, чтобы объект создавался в каталоге вызова (ярлыком) »

1.Делаешь ярлык.
2.Пр.кнопка => Свойства.
3.В строке быстрый вызов указываешь путь до папки исполнения.
Например: D:\
4.Применить и ОК
Цитата:

Цитата balzaman
был просто выделен, а не открыт »

Я понял не нужно. чтобы при создании объект открывался?
Тогда удали строчки
Код:

If err.number = vbEmpty then
Set objShell = CreateObject("WScript.Shell")
objShell.run ("Explorer" &" " & strDirectory & "\" )
Else
WScript.echo "Ошибка vbscript: " & err.number
End If

для папки и
Код:

Set WshShell = WScript.CreateObject("WScript.Shell")
и
WshShell.Run("Explorer" &" " & FileName & ".txt")

для файла.

balzaman 25-03-2011 05:59 1643357

Цитата:

Цитата OSArev
Если Windows 7 можно из контекстного меню. Reg-файл для папки »

у меня установлена wondows xp sp3

с созданием папки в активном каталоге я разобрался
в свойствах кнопки плагина Launcher Buttons (программа Qttbar) прописал Working Dir = %c%
теперь папка создается именно в каталоге из которого производится запуск скрипта

Цитата:

Цитата OSArev
Я понял не нужно. чтобы при создании объект открывался?
Тогда удали строчки »

по данному изменению:
объекты создаются, но не выделяются!
например, есть каталог с массой всяких папок, вызван скрипт создания папки \ файла (тот что без последующего открытия)
объект создается, затем его нужно найти и выделить
можно ли сделать так, чтобы созданный объект выделялся автоматически?

OSArev 25-03-2011 08:24 1643383

Цитата:

Цитата balzaman
можно ли сделать так, чтобы созданный объект выделялся автоматически? »

Вот этого, я ещё не знаю.

balzaman 25-03-2011 10:22 1643438

OSArev, спасибо за помощь

DPCKA 08-02-2013 17:39 2085712

Вложений: 2
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новая папка]

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новая папка\command]
@="WScript C:\\Users\\999\\Desktop\\001.vbs \"%V\""

делаю также, вылазит ошибка, кто может помочь ?

Iska 09-02-2013 04:21 2086099

DPCKA, «@» в
Код:

@="WScript C:\\Users\\999\\Desktop\\001.vbs \"%V\""
и означает параметр по умолчанию. Вам следовало не вводить ручками, а сохранить приведённый текст:
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новая папка]

[HKEY_CLASSES_ROOT\Directory\Background\shell\Новая папка\command]
@="WScript C:\\Users\\999\\Desktop\\001.vbs \"%V\""

в .reg-файл и импортировать его. Ровно как и было написано выше.

P.S. После импорта reg-файла можете открыть редактор реестра и посмотреть, как должно было выглядеть то, что Вы хотели ввести «ручками».

DPCKA 10-02-2013 01:21 2086757

Iska, спасибо.

Roman3D 07-04-2018 11:52 2807548

У меня аналогичная задача - нужен скрипт, который создаёт три директории с заданными именами и нужно повесть его на кнопку в Total Commander.

Скрип набросал на основе тех, что тут публиковались
Код:

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder "Новая папка 1"
FSO.CreateFolder "Новая папка 2"
FSO.CreateFolder "Новая папка 3"

Set FSO = Nothing
WScript.Quit

Повесил его на кнопку в TC.
Да, он создаёт директории, но только там, где сам расположен, а не на активной панели TC.

Что нужно ещё прописать, чтобы директории создавались там, где нужно?
Помогите, пожалуйста.

Petya V4sechkin 07-04-2018 12:31 2807550

Цитата:

Цитата Roman3D
Повесил его на кнопку в TC.

Там ведь можно задать дополнительные параметры? Добавьте %P (это текущая панель), а в скрипте примерно так:
Код:

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder WScript.Arguments(0) & "Новая папка 1"
FSO.CreateFolder WScript.Arguments(0) & "Новая папка 2"
FSO.CreateFolder WScript.Arguments(0) & "Новая папка 3"

Set FSO = Nothing
WScript.Quit


Roman3D 07-04-2018 12:43 2807553

Petya V4sechkin, огромное спасибо, ты сделал мою жизнь проще :)

Roman3D 07-04-2018 14:51 2807574

Цитата:

Цитата Petya V4sechkin
а в скрипте примерно так: »

Есть проблемка.
Если в имени директории есть пробел, то скрипт поднимается выше, если в следующей тоже есть пробел, то ещё выше и так может вплоть до корня диска.
И создаёт директории уже там. Причём имена получаются составными.
И ещё момент - если в имени создаваемой директории есть пробел (например "New folder 1") то создаётся одна директория и скрипт вываливается с ошибкой. Если пробела нет ("Newfolder1"), то создаются все три.

Вот результат попытки создать три новых дирекории в "Second folder", вдруг непонятно написал :) -


Можно как-то обойти вопрос с пробелами в именах? Очень уж не хочется директории переименовывать...

Iska 07-04-2018 15:27 2807590

Roman3D, вот точно такой же код:
Скрытый текст
Код:

Option Explicit

Dim strFolder

If WScript.Arguments.Count = 1 Then
        strFolder = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FolderExists(strFolder) Then
                        .CreateFolder .BuildPath(strFolder, "Новая папка 1")
                        .CreateFolder .BuildPath(strFolder, "Новая папка 2")
                        .CreateFolder .BuildPath(strFolder, "Новая папка 3")
                End If
        End With
End If

WScript.Quit 0


Вы его сохраняете в файл с расширением .vbs. В Total Commander'е создаёте примерно такую кнопку:
Скрытый текст

В поле «Параметры» указываете два параметра: путь к этому сохранённому скрипту и «%P», не забыв обрамить их кавычками и разделив пробелом.

Roman3D 07-04-2018 15:48 2807591

Iska, ну вроде всё норм!
Только кнопку сделал так -



Спасибо!

Iska 07-04-2018 16:00 2807593

Roman3D, можно и так, если у Вас умолчальным обработчиком для .vbs выступает wscript.exe (у меня же — консольный cscript.exe, я так назначил, мне так проще и удобнее работать из-под Far Manager'а).


Время: 02:58.

Время: 02:58.
© OSzone.net 2001-