Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование "удобняшек" на VBScript

Автор: quakerock
Дата сообщения: 24.06.2011 12:54
Evgeny972



Цитата:
FSO.CreateFolder i заменить на Set CurFolder = FSO.CreateFolder i
А дальше, по моему, ясно: ты имеешь объект Folder, можешь получить путь к нему, например:
CurFolderPath = CurFolder.Path


У мну что-то не получается по твоему)= покажи плз.

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


Код: Option Explicit
Dim FSO, i, f, fc, f1, ParentFolder
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 9
FSO.CreateFolder i
Next
ParentFolder = FSO.GetParentFolderName(WScript.ScriptFullName)
Set f = fso.GetFolder(ParentFolder)
Set fc = f.SubFolders
For Each f1 in fc
f1.CreateTextFile("Привет.php")
Next
Set Fso = Nothing
WScript.Quit
Автор: ComradG
Дата сообщения: 24.06.2011 18:11

Цитата:
Но есть одно но, которое может не устроить
дык ведь никто не запрещает промапить папку на наличие оных каталогов, прикрутив дополнительную проверку, например, таким образом: создаем массив из названий папок, а далее запускаем цикл проверки, и если папка с передаваемым именем уже существует, назвать создаваемый каталог как-то иначе. тем паче, что конструкции стандартные: objFSO.GetFolder(...), Do ... Until, If ... Then - сложности не должны вызвать даже у новичков.
Автор: Evgeny972
Дата сообщения: 26.06.2011 11:04
GepardSD quakerock
Цитата:
покажи плз
В папке E:\Test лежит файлец test.vbs

с таким содержимым (жирным отличия от исходного GepardSD):
Код: Option Explicit
Dim FSO, i, CurFolder, MyFile
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 19
Set CurFolder = FSO.CreateFolder(i)
Set MyFile = CurFolder.CreateTextFile("index.php", True)
MyFile.Close

Next
Set FSO = Nothing
WScript.Quit
Автор: AKBA
Дата сообщения: 26.06.2011 20:14
Всем добрый вечер/день/утро!

Мне требуется решить вот такую проблему:
1 - имеется документ MS Word
2 - он состоит из двух страниц
3 - на первой странице документа в четырех местах имеется шифр вида хххххх
4 - этот шифр необходимо менять в арифметической последовательности хххххх+1, а остальной текст оставлять без изменений

Что можно сделать такое, чтобы я например, забивал первый и последний номер шифра, нажимал печать и документ автоматически бы распечатывался на одном листе с двух сторон в необходимом количестве экземпляров?
Автор: GepardSD
Дата сообщения: 26.06.2011 20:58
Отлично, это то, что нужно. Спасибо, Evgeny972.
quakerock, твой способ тоже работает, но нужно прописывать дирректорию, что не очень удобно.
Автор: quakerock
Дата сообщения: 27.06.2011 07:30
GepardSD
Во втором варианте, который я предложил не надо прописывать пути. А так да, способ Evgeny972 работает идеально=).

Evgeny972
Спасибо за разъяснения.
Автор: Evgeny972
Дата сообщения: 27.06.2011 07:47
AKBA
Цитата:
Что можно сделать такое
Написать нужную приблуду на VBA, сохраняемую в том же документе, и прикрутить кнопку
Автор: NiakrisAnn
Дата сообщения: 30.06.2011 06:38
здравствуйте! У меня проблема, надеюсь, вы сможете мне помочь.
пишу скрипт, который должен считывать данные пользователей с AD одного сервера и записывать в адресную книгу Kerio на другом. со считыванием проблем никаких, а вот с подключением к керио не выходит(( выдает ошибку про недопустимый путь службы каталогов. Хотя LDAP Viewer подключается нормально. есть соображения, что я неправильно пытаюсь подключиться под определенным пользователем с паролем. Помогите! и если можно, в кратце об основных способах подключения расскажите((

sUid = "login@server.ru"
sDN = "cn="&sUid
sRoot = "LDAP://192.168.0.100:389"
sPass = "******"

Dim oLDAP: Set oLDAP = GetObject("LDAP:")
Dim oAuth
Set oAuth = oLDAP.OpenDSObject(sRoot,sUid,sPass,0)

Dim oConn: Set oConn = CreateObject("ADODB.Connection")
oConn.Provider = "ADsDSOObject"
oConn.Open sRoot,sUid,sPass
Автор: K_Ok_O_S
Дата сообщения: 01.07.2011 14:50
Добавление пункта "Создать папку" в контекстное меню на первое место
Помогите, пожалуйста, актуализировать этот твик. ( http://forum.oszone.net/post-1179019.html#post1179019 )

В конце строк пробелов нет. У меня Win XP sp3 home(пробовал и из-под админа и из-под юзера) - ни в рабочей системе, ни в виртуалке (XP SP3 Prof) не работает- в контекстном меню ничего не появляется. Если так вбить в консоли

Код: wscript.exe YYYY_MM_DD.vbs -folder
Автор: NecroTYN
Дата сообщения: 02.07.2011 13:39
Здравствуйте Господа программисты!!!

Очень нужна ваша помощь в следующем вопросе:

Есть база данных включающая в себя следующие таблицы: ... Заказы,клиенты,продукты....

Мне нужно чтобы при создании ЗАКАЗА автоматически создавалась группа папок в определенном месте диска (D:\Documents\Заказы\...), а имена этих папок создавались бы из определенных полей таблиц. Например:
после создания заказа должны появится папки по указанному пути с таким вот именем:
D:\Documents\Заказы\ул.Красная\Сергеев\
где ул.Красная это адрес клиента, Сергеев это Фамилия клиента,
В папке "Сергеев" в свою очередь создаются папки (Стойка компьютерная,Стол письменный,Шкаф купе), имена которых берутся из подтаблицы "продукты" (в которой мы собственно и составляем заказ), каждая из которых содержит в себе еще 4 папки с неизменными названиями(Замер,Модель,Раскрой,Эскизы,Документы)....

имя 1ой папки-берется из таблицы qdfOrders - Address
имя 2ой папки-берется из таблицы qdfMain - Client
имя 3ей папки-берется из таблицы tblOrdersProducts - Product

"третьих" папок должно создаваться столько, сколько заказано продуктов, за исключением услуг(которые кстати тоже находятся в таблице tblOrdersProducts), в каждой из них создаются следующие папки:

Замер
Модель
Раскрой
Эскизы
Документы

С нетерпением жду ответа
Автор: Evgeny972
Дата сообщения: 03.07.2011 08:00
NecroTYN
Цитата:
Мне нужно чтобы при создании ЗАКАЗА
Ну такие задачи решаются средствами БД, а VBS к этому отношения не имеет.
Автор: NecroTYN
Дата сообщения: 03.07.2011 08:42
Evgeny972

Цитата:
Ну такие задачи решаются средствами БД, а VBS к этому отношения не имеет.

Дело в том что, база данных находится в составе программы, вот ответ разрабов:

Цитата:
Вам надо написать файл-скрипт .VBS, который будет создавать папки в файловой системе, основываясь на переданные в него параметры.
Далее нужно задать триггер на добавление на таблицу "Заказы", но в качестве команды указать не SQL-инструкцию, а запуск данного файла.

Вот скрины настройки полей

Автор: Evgeny972
Дата сообщения: 03.07.2011 09:16
NecroTYN
Цитата:
вот ответ разрабов
Вот разрабов и третируйте об этой реализации через жопицу автогеном
Автор: NecroTYN
Дата сообщения: 03.07.2011 09:21

Цитата:
Вот разрабов и третируйте об этой реализации через жопицу автогеном


Ага, на это мне вот так ответили:


Цитата:
Вы можете обратиться с данной задачей к нашему ИТ-специалисту,
который сделает вам все это "под ключ" в рамках платной услуги.


а БОЛЬШЕ им платить желания нет
Автор: abz
Дата сообщения: 03.07.2011 13:28
Помогите создать скриптик такого характера. Качается фильм, к примеру, с рапиды, состоящий из кучи томов RAR архива. Один из томов скачался битым и лечится в winrar. Вылеченный том назвается fixed.имя файла.rar
Мне нужно, чтобы скрипт переименовал файл с fixed. в файл без этой приставки и заменил этим файлом битый автоматически и без вопросов.

Добавлено:
Лучше даже чтобы при запуске скрипта переименовывались все файлы папки с приставкой fixed. в такие же с перезаписью оригинальных. Так возможно?
Автор: Evgeny972
Дата сообщения: 03.07.2011 16:30
abz

Цитата:
Лучше даже чтобы при запуске скрипта переименовывались все файлы папки с приставкой fixed. в такие же с перезаписью оригинальных. Так возможно?

Окончательный вариант

Код:
Option Explicit
Dim FSO, cFolder, FilesSet, cFile, dFile, tStr
Dim tFolder

Const fPrefix="fixed."
Const fExt=".rar"

If (WScript.Arguments.Count<>1) Then
tFolder="."
Else
tFolder=WScript.Arguments(0)
If (Right(tFolder, 1)="\") Then
tFolder = Left(tFolder, Len(tFolder)-1)
End If
End If

Set FSO = CreateObject("Scripting.FileSystemObject")
Set cFolder=FSO.GetFolder(tFolder)
Set FilesSet = cFolder.Files

For Each cFile In FilesSet
tStr=cFile.Name
If (Left(LCase(tStr), Len(fPrefix))=fPrefix) And (Right(LCase(tStr), Len(fExt))=fExt) Then
tStr=Right(tStr, Len(tStr)-Len(fPrefix))
Set dFile = FSO.GetFile(tFolder & "\" & tStr)
dFile.Delete(True)
cFile.Name = tStr
End If
Next

Set FSO = Nothing
WScript.Quit
Автор: NecroTYN
Дата сообщения: 04.07.2011 13:19
Всем Доброго дня

по поводу вышеизложенного вопроса создали вот такой вот код
Цитата


Цитата:
MakeDir.VBS qdfOrders.Address qdfMain.Client tblOrdersProducts.Product




MakeDir.VBS:


Код:

Цитата:
Set FSO = CreateObject("Scripting.FileSystemObject")

strPath="C:\Documents"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath & "\Заказы"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& WScript.Arguments(0)
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& WScript.Arguments(1)
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& WScript.Arguments(2)
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)



работает вот с таким результатом может подскажете что не так ????
Автор: Evgeny972
Дата сообщения: 04.07.2011 13:48
NecroTYN
Цитата:
работает вот с таким результатом
1-е: То что ты пытаешься выложить недоступно
2-е: 100% могу сказать что работает он с таким результатом:
<\Documents\ (0)>
+-<\Documents\Заказы\ (0)>
+-<\Documents\Заказы\qdfOrders.Address\ (0)>
+-<\Documents\Заказы\qdfOrders.Address\qdfMain.Client\ (0)>
+-<\Documents\Заказы\qdfOrders.Address\qdfMain.Client\tblOrdersProducts.Product\ (0)

т.е. делает точно то, что ты ему задал — имена папок.
VBS сам по себе не полезет в вашу БД и не будет считывать оттуда значения полей.
Автор: NecroTYN
Дата сообщения: 04.07.2011 14:04

Цитата:
1-е: То что ты пытаешься выложить недоступно

Цитата:
2-е: 100% могу сказать что работает он с таким результатом:
<\Documents\ (0)>
+-<\Documents\Заказы\ (0)>
+-<\Documents\Заказы\qdfOrders.Address\ (0)>
+-<\Documents\Заказы\qdfOrders.Address\qdfMain.Client\ (0)>
+-<\Documents\Заказы\qdfOrders.Address\qdfMain.Client\tblOrdersProducts.Product\ (0)


именно это я и пытался выложить



Добавлено:
Может подскажете как правильно написать код ???
Автор: Evgeny972
Дата сообщения: 04.07.2011 15:48
NecroTYN
Я уже объяснял: без взаимодействия с БД ты ничего не напишешь. (Тем более с твоей квалификацией)
Но вот вам направление:
написать скрипт который только определяет количество переданных параметров и сохраняет их в текстовый файл и «задать триггер на добавление на таблицу "Заказы", но в качестве команды указать не SQL-инструкцию, а запуск данного файла.» (это уже в програме/БД)
А далее тупо смотреть (анализировать ), что в скрипт передаётся
Автор: ComradG
Дата сообщения: 09.07.2011 22:03
как перевести код VBScript'а
Код: On Error Resume Next

If WScript.Arguments.Count = 0 Then
WScript.Echo "Синтаксис: cscript [//nologo] tail.vbs [число, файл]."
WScript.Quit
End If

intLines = Int(WScript.Arguments.Item(0))
strFileName = WScript.Arguments.Item(1)

WScript.Echo Tail(intLines, strFileName)

Function Tail(intLines, strFileName)
Dim strFile, objFile, arrFile, intCount

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName)

strFile = objFile.ReadAll
arrFile = Split(strFile, vbCrLf)

For intCount = Ubound(arrFile) - (intLines - 1) To Ubound(arrFile)
Tail = Tail & arrFile(intCount) & vbCrLf
Next
End Function
Автор: smirnvlad
Дата сообщения: 10.07.2011 08:13
ComradG

Код: [no]
vbcode = ''
vbcode += 'On Error Resume Next ' + "\n";
...
vbcode += ' End Function ' + "\n";

var vb = new ActiveXObject("MSScriptControl.ScriptControl");
vb.language = "VBScript";
vb.addobject('WScript', WScript, true);
vb.addcode(vbcode);
[/no]
Автор: ComradG
Дата сообщения: 10.07.2011 14:27
smirnvlad
ты - голова! спасибо!!!
Автор: NecroTYN
Дата сообщения: 11.07.2011 17:07
В общем составили мы вот такой вот код:


Код: Dim sDbPath 'путь к файлу БД
sDbPath = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\Учет клиентов\DemoDatabase.mdb"

Dim Con 'объект Connection
Set Con = CreateObject("ADODB.Connection") 'создание объекта Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDbPath & ";Persist Security Info=False" 'открываем соединение с базой данных

Dim sSql 'SQL инструкция
sSql = "SELECT Top 1 p.ProductType FROM tblOrdersProducts op,tblProducts p WHERE op.Product=p.ProductName AND op.ID="& Mid

(WScript.Arguments(0),2)
Set oRec = Con.Execute(sSql) 'выполняем SQL инструкцию
If oRec.EOF Then WScript.Quit 'если продукта нет в справочнике, то выход

sType = oRec.Fields(0).Value 'тип товара
If Left(sType,6)="Услуга" Then WScript.Quit 'если Услуга, то выход

sSql = "SELECT o.Address,m.Client,op.Product FROM tblOrdersProducts op,tblOrders o,tblMain m WHERE m.ID=o.ClientID AND

o.ID=op.OrderID AND op.ID="& Mid(WScript.Arguments(0),2)
Set oRec = Con.Execute(sSql) 'выполняем SQL инструкцию

Dim FSO 'объект FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim strPath 'путь к папке
strPath="C:\Documents"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath & "\Заказы"
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(0).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(1).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)
strPath=strPath &"\"& Replace(oRec.Fields(2).Value,"""","")
If Not FSO.FolderExists(strPath) Then FSO.CreateFolder(strPath)

Con.Close 'закрываем Connection
Set Con = Nothing 'очищаем переменную
Автор: smirnvlad
Дата сообщения: 11.07.2011 18:57
NecroTYN
скорее всего скрипту не переданы параметры и WScript.Arguments(0) отсутствует, вот и ругается
Автор: NecroTYN
Дата сообщения: 11.07.2011 19:15
smirnvlad

Цитата:
скорее всего скрипту не переданы параметры и WScript.Arguments(0) отсутствует, вот и ругается

подскажите пожалуйста как правильно сделать ???
Автор: ComradG
Дата сообщения: 11.07.2011 19:30
NecroTYN
smirnvlad прав:
Цитата:
(WScript.Arguments(0),2)
??? что этим хотелось выразить? почитай вооот этот документ от мелкомягких, чтобы понять что в твоем скрипте не так.
Автор: NecroTYN
Дата сообщения: 11.07.2011 19:36
ComradG
Как я писал выше я не программист и языков не знаю, вот задача которую пытаемся решить:

Есть программа работающая с базой данных Access и поддерживающая SQL, включающая в себя следующие таблицы: ... Заказы,клиенты,продукты....

Был написан скрипт VBS(не мной - я не умею) чтобы при создании ЗАКАЗА автоматически создавалась группа папок в определенном месте диска (D:\Documents\Заказы\...), а имена этих папок создавались бы из определенных полей таблиц. Например:
после создания заказа должны появится папки по указанному пути с таким вот именем:
D:\Documents\Заказы\ул.Красная\Сергеев\
где ул.Красная это адрес клиента, Сергеев это Фамилия клиента,
В папке "Сергеев" в свою очередь создаются папки (Стойка компьютерная,Стол письменный,Шкаф купе), имена которых берутся из подтаблицы "продукты" (в которой мы собственно и составляем заказ)

имя 1ой папки-берется из таблицы qdfOrders - Address
имя 2ой папки-берется из таблицы qdfMain - Client
имя 3ей папки-берется из таблицы tblOrdersProducts - Product

"третьих" папок должно создаваться столько, сколько заказано продуктов, за исключением услуг(которые кстати тоже находятся в таблице tblOrdersProducts)

Все товары и услуги находятся в таблице tblOrdersProducts и делятся на категории - товары и услуги (поле ProductsCategoryCalc), была сделана выборка, чтобы на категорию "УСЛУГИ" папки не создавались..
Автор: smirnvlad
Дата сообщения: 11.07.2011 21:19
NecroTYN
дело не в самом скрипте, а в том что запускать его нужно с параметром, что-то вроде "create_folders.vbs 1256", а сейчас запускается "create_folders.vbs", ему не хватает входных данных вот он и вылетает
Автор: NecroTYN
Дата сообщения: 11.07.2011 21:30

Цитата:
ему не хватает входных данных

... откуда их брать и как ???

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.