<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7147</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7147&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS. Добавить (изменить) "свойства" файла SolidWorks».]]></description>
		<lastBuildDate>Tue, 15 May 2012 10:37:57 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60349#p60349</link>
			<description><![CDATA[<p><span style="color: Green"><strong>KlimTV</strong>, используйте <a href="http://forum.script-coding.com/help.php#bbcode">тэг «url»</a> для оформления ссылок на форуме.</span></p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 15 May 2012 10:37:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60349#p60349</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60348#p60348</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Tue, 15 May 2012 09:57:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60348#p60348</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60324#p60324</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (VSVLAD)]]></author>
			<pubDate>Mon, 14 May 2012 14:29:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60324#p60324</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60307#p60307</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Mon, 14 May 2012 08:12:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60307#p60307</guid>
		</item>
		<item>
			<title><![CDATA[VBS. Добавить (изменить) "свойства" файла SolidWorks]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59691#p59691</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (KlimTV)]]></author>
			<pubDate>Tue, 24 Apr 2012 13:37:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59691#p59691</guid>
		</item>
	</channel>
</rss>
