PDA

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


balzaman
23-03-2011, 18:27
здравствуйте
есть скрипт создания новой папки (нашел на данном форуме)
---
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
чтобы папка создавалась в каталоге из которого он
вызван (кнопкой QTTabBar) », насчёт этого не знаю, а для
чтобы папка создавалась в каталоге из которого он
вызван », сейчас проверил: скрипт лежит на Столе, а вызывал из другой папки - создаёт папку в папке из которой вызывался.
Вот немного расширенный скрипт:

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

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

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

OSArev
24-03-2011, 13:31
А из контекстного меню?
Если 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\""

Путь укажи свой.
как изменить скрипт, чтобы объект создавался в каталоге вызова (ярлыком) »
1.Делаешь ярлык.
2.Пр.кнопка => Свойства.
3.В строке быстрый вызов указываешь путь до папки исполнения.
Например: D:\
4.Применить и ОК
был просто выделен, а не открыт »
Я понял не нужно. чтобы при создании объект открывался?
Тогда удали строчки

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
Если Windows 7 можно из контекстного меню. Reg-файл для папки »
у меня установлена wondows xp sp3

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

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

OSArev
25-03-2011, 08:24
можно ли сделать так, чтобы созданный объект выделялся автоматически? »
Вот этого, я ещё не знаю.

balzaman
25-03-2011, 10:22
OSArev, спасибо за помощь

DPCKA
08-02-2013, 17:39
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
DPCKA, «@» в
@="WScript C:\\Users\\999\\Desktop\\001.vbs \"%V\""
и означает параметр по умолчанию. Вам следовало не вводить ручками, а сохранить приведённый (http://forum.oszone.net/post-1642790.html#post1642790) текст:
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
Iska, спасибо.

Roman3D
07-04-2018, 11:52
У меня аналогичная задача - нужен скрипт, который создаёт три директории с заданными именами и нужно повесть его на кнопку в 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
Повесил его на кнопку в 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
Petya V4sechkin, огромное спасибо, ты сделал мою жизнь проще :)

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

Вот результат попытки создать три новых дирекории в "Second folder", вдруг непонятно написал :) -
https://s8.hostingkartinok.com/uploads/images/2018/04/ac8726397190fffd6cc0a42c79f67cce.png

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

Iska
07-04-2018, 15:27
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'е создаёте примерно такую кнопку:
https://i.imgur.com/aPSu9rm.png
В поле «Параметры» указываете два параметра: путь к этому сохранённому скрипту и «%P», не забыв обрамить их кавычками и разделив пробелом.

Roman3D
07-04-2018, 15:48
Iska, ну вроде всё норм!
Только кнопку сделал так -

https://s8.hostingkartinok.com/uploads/images/2018/04/ce4241610cbbc472a1e49bba6ee367f4.png

Спасибо! http://www.kolobok.us/smiles/light_skin/drinks.gif

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




© OSzone.net 2001-2012