<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7147&amp;type=atom" />
	<updated>2012-05-15T10:37:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7147</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=60349#p60349" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>KlimTV</strong>, используйте <a href="http://forum.script-coding.com/help.php#bbcode">тэг «url»</a> для оформления ссылок на форуме.</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-05-15T10:37:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=60349#p60349</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=60348#p60348" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Про диалоги открытия файлов, посмотрите тут: http://forum.script-coding.com/viewtopic.php?id=64</p></blockquote></div><p>Спасибо за подсказку.<br />Все, работает, пользователь пока доволен <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Вот пример кода, если кому-нибудь когда-нибудь встретится похожая задача. Для работы необходим <a href="http://www.microsoft.com/en-us/download/details.aspx?id=8422#overview">Microsoft Developer Support OLE File Property Reader 2.1 Sample</a>, а так же лицензирование класса MSComDlg.CommonDialog (нашел тут <a href="http://forum.ru-board.com/topic.cgi?forum=33&amp;topic=1491&amp;start=124">http://forum.ru-board.com/topic.cgi?for … ;start=124</a> )</p><div class="codebox"><pre><code>&#039;VBS
Set objShellApp = CreateObject(&quot;Shell.Application&quot;)        &#039; создаем объект оболочки
Set FSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)    &#039; создаем объект файловой системы
FileChangedCount = 0                                                  &#039; Количество обработанных файлов

Main                                                                           &#039; Поиск файлов

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

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

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

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

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

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

&#039;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot; Освобождаем память
Set objShellApp = Nothing
Set FSO = Nothing
Set Cprop = Nothing
Set OpenDialog = Nothing</code></pre></div>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-05-15T09:57:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=60348#p60348</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=60324#p60324" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Однако при попытке перевести это на VBS код начинает выдавать ошибку</p></blockquote></div><p>Потому что это код VB.NET.</p><p>Про диалоги открытия файлов, посмотрите тут: <a href="http://forum.script-coding.com/viewtopic.php?id=64">http://forum.script-coding.com/viewtopic.php?id=64</a></p>]]></content>
			<author>
				<name><![CDATA[VSVLAD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24998</uri>
			</author>
			<updated>2012-05-14T14:29:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=60324#p60324</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=60307#p60307" />
			<content type="html"><![CDATA[<p>Всем еще раз добрый день.</p><p>С вопросом как назначить интересующие меня свойства я разобрался (помогло вот это http://blog.rodhowarth.com/2008/06/how-to-set-custom-attributes-file.html). Теперь возникла проблема, как сделать удобным работать пользователю. Изначально предполагалось, что все файлы в указанной пользователем папке получают свои свойства в соответствии с некоторыми условиями, но пожелания дополнились: назначить свойства файлов, выбранных пользователем в диалоговом окне. Для диалогового окна с выбором папки есть объект Shell с методом BrowseForFolder. <strong>Есть ли аналог для файлов ?</strong></p><p>Вот, поискал по интернету, нашел вот что http://msdn.microsoft.com/en-us/library/microsoft.win32.openfiledialog.aspx<br />Пример на VB, судя по синтаксису for Application<br /></p><div class="codebox"><pre><code>&#039; Configure open file dialog box
Dim dlg As New Microsoft.Win32.OpenFileDialog()
dlg.FileName = &quot;Document&quot; &#039; Default file name
dlg.DefaultExt = &quot;.txt&quot; &#039; Default file extension
dlg.Filter = &quot;Text documents (.txt)|*.txt&quot; &#039; Filter files by extension

&#039; Show open file dialog box
Dim result? As Boolean = dlg.ShowDialog()

&#039; Process open file dialog box results
If result = True Then
    &#039; Open document
    Dim filename As String = dlg.FileName
End If</code></pre></div><p>Однако при попытке перевести это на VBS код начинает выдавать ошибку - невозможно создать объект контейнером ActiveX<br /></p><div class="codebox"><pre><code>VBS
Set dlg = CreateObject(&quot;Microsoft.Win32.OpenFileDialog&quot;)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-05-14T08:12:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=60307#p60307</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=59691#p59691" />
			<content type="html"><![CDATA[<p>Добрый день.</p><p>Есть такая задача: Есть папка, в ней лежат файлы SolidWorks - модели сборок и деталей. Необходимо для каждой модели добавить свойство: Имя свойства &quot;Раздел СП&quot;, тип данных &quot;Строка&quot;, значение &quot;Прочие изделия&quot;(для примера, назначается в зависимости от...). <br />Без открытия документа приложением можно зайти в свойства файла и на вкладке особые добавить необходимую информацию. Но для каждого отдельного документа повторять эти действия устанет рука <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Вопрос следующий - есть ли возможность осуществлять запись таких свойств с помощью объектов Windows Script Host? Сталкивался кто-нибудь с подобной задачей ?</p>]]></content>
			<author>
				<name><![CDATA[KlimTV]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27683</uri>
			</author>
			<updated>2012-04-24T13:37:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=59691#p59691</id>
		</entry>
</feed>
