1

Тема: VBS. Добавить (изменить) "свойства" файла SolidWorks

Добрый день.

Есть такая задача: Есть папка, в ней лежат файлы SolidWorks - модели сборок и деталей. Необходимо для каждой модели добавить свойство: Имя свойства "Раздел СП", тип данных "Строка", значение "Прочие изделия"(для примера, назначается в зависимости от...).
Без открытия документа приложением можно зайти в свойства файла и на вкладке особые добавить необходимую информацию. Но для каждого отдельного документа повторять эти действия устанет рука

Вопрос следующий - есть ли возможность осуществлять запись таких свойств с помощью объектов Windows Script Host? Сталкивался кто-нибудь с подобной задачей ?

2

Re: VBS. Добавить (изменить) "свойства" файла SolidWorks

Всем еще раз добрый день.

С вопросом как назначить интересующие меня свойства я разобрался (помогло вот это http://blog.rodhowarth.com/2008/06/how-to-set-custom-attributes-file.html). Теперь возникла проблема, как сделать удобным работать пользователю. Изначально предполагалось, что все файлы в указанной пользователем папке получают свои свойства в соответствии с некоторыми условиями, но пожелания дополнились: назначить свойства файлов, выбранных пользователем в диалоговом окне. Для диалогового окна с выбором папки есть объект Shell с методом BrowseForFolder. Есть ли аналог для файлов ?

Вот, поискал по интернету, нашел вот что http://msdn.microsoft.com/en-us/library/microsoft.win32.openfiledialog.aspx
Пример на VB, судя по синтаксису for Application

' Configure open file dialog box
Dim dlg As New Microsoft.Win32.OpenFileDialog()
dlg.FileName = "Document" ' Default file name
dlg.DefaultExt = ".txt" ' Default file extension
dlg.Filter = "Text documents (.txt)|*.txt" ' Filter files by extension

' Show open file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process open file dialog box results
If result = True Then
    ' Open document
    Dim filename As String = dlg.FileName
End If

Однако при попытке перевести это на VBS код начинает выдавать ошибку - невозможно создать объект контейнером ActiveX

VBS
Set dlg = CreateObject("Microsoft.Win32.OpenFileDialog")

3

Re: VBS. Добавить (изменить) "свойства" файла SolidWorks

Однако при попытке перевести это на VBS код начинает выдавать ошибку

Потому что это код VB.NET.

Про диалоги открытия файлов, посмотрите тут: http://forum.script-coding.com/viewtopic.php?id=64

4 (изменено: KlimTV, 2012-05-15 16:23:05)

Re: VBS. Добавить (изменить) "свойства" файла SolidWorks

Про диалоги открытия файлов, посмотрите тут: http://forum.script-coding.com/viewtopic.php?id=64

Спасибо за подсказку.
Все, работает, пользователь пока доволен . Вот пример кода, если кому-нибудь когда-нибудь встретится похожая задача. Для работы необходим Microsoft Developer Support OLE File Property Reader 2.1 Sample, а так же лицензирование класса MSComDlg.CommonDialog (нашел тут http://forum.ru-board.com/topic.cgi?for … ;start=124 )

'VBS
Set objShellApp = CreateObject("Shell.Application")        ' создаем объект оболочки
Set FSO = CreateObject("Scripting.FileSystemObject")    ' создаем объект файловой системы
FileChangedCount = 0                                                  ' Количество обработанных файлов

Main                                                                           ' Поиск файлов

Sub Main    '""""""""""""""""" Поиск файлов
On error Resume Next                                                                        ' Если файлы открыты приложением, будут пропущены
Set OpenDialog = CreateObject("MSComDlg.CommonDialog")               ' Microsoft Common Dialog Control
With OpenDialog
    .DialogTitle = "Откройте нужный Вам файл(ы)"
    .InitDir = "C:\"
    .Filter = "Модели Solidworks (*.sldprt,*.sldasm)|*.sldprt;*.sldasm"   ' Расширения файлов
    .FilterIndex = 1 
    .Flags = 2621952
    .MaxFileSize =32000
    .ShowOpen
    Filename = .Filename
End With

If (Len(OpenDialog.FileName)= 0) Then
    msgbox "Файлы не выбраны!"
    Exit Sub
End If

files = Split(OpenDialog.Filename, vbNullChar)
count_files = UBound(files)
If count_files > 0 Then
    path = files(0) + "\"                                                                                  ' в ХР работает этот вариант   path = files(0), в W7 почему то в окончании \ отсутствует
    For i = 1 To count_files
        PropertySearch path + files(i)                                                                ' Если выбрано несколько файлов
    Next
Else
    PropertySearch path + files(0)                                                                   ' Если выбран один файл
End If
Msgbox "Выполнено." &chr(13)& "Количество обработанных файлов: "& FileChangedCount, vbInformation
End Sub

Sub PropertySearch (FilePath)      '""""""""""""""""" поиск свойств файла
'msgbox "FilePath = " & FilePath
Set Cprop = CreateObject("DSOFile.OleDocumentProperties")                         ' создаем объект подключения к свойствам файла
Cprop.Open FilePath, false                                                                            ' Открываем текущий файл
IsHere = ""                                                                                                  ' Наличие свойства Раздел СП, если останется "" то нету
if Cprop.CustomProperties.count > 0 then                                                      ' Если у файла есть свойства
 for iprop=0 to Cprop.CustomProperties.count-1                                             ' цикл по свойствам
 if Cprop.CustomProperties.item(iprop).Name = "Раздел СП" then                   ' если Раздел СП есть
  IsHere = 1                                                                                                ' делаем отметку
  Exit For
 End if
 Next
End if
If IsHere = "" then                                                                                       ' если Раздела СП нету
 AdCustomProperty Cprop                                                                            ' назначение свойств для файла
else
 AdCustomPropertyEx Cprop, iprop                                                               ' если есть
End if
Cprop.close                                                                                                ' закрываем файл
End Sub

Sub AdCustomProperty(Cprop)      '""""""""""""""""" назначение свойств для файла
key = "Раздел СП"                                                                                     ' Имя свойства
valueForKey = "Прочие изделия"                                                                ' Значение свойства
Cprop.CustomProperties.Add key, valueForKey                                             ' Добавляем новое свойство с
Cprop.Save                                                                                               ' Сохранить изменения
FileChangedCount = FileChangedCount + 1                                                  ' Инкрементация счетчика обработанных
End Sub

Sub AdCustomPropertyEx(Cprop,iprop)      '""""""""""""""""" назначение свойств для файла
valueForKey = "Прочие изделия"                                                                ' Значение свойства
Cprop.CustomProperties.Item(iprop).value = valueForKey                             ' изменяем свойство
Cprop.Save                                                                                               ' Сохранить изменения
FileChangedCount = FileChangedCount + 1                                                  ' Инкрементация счетчика обработанных
End Sub

'""""""""""""""""" Освобождаем память
Set objShellApp = Nothing
Set FSO = Nothing
Set Cprop = Nothing
Set OpenDialog = Nothing

5

Re: VBS. Добавить (изменить) "свойства" файла SolidWorks

KlimTV, используйте тэг «url» для оформления ссылок на форуме.