<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Перенос фото в папку с датой съемки]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10731&amp;type=atom" />
	<updated>2015-07-02T00:48:27Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10731</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94855#p94855" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><div class="codebox"><pre><code>Folder.GetDetailsOf(Folder.ParseName(Name), 12)</code></pre></div></blockquote></div><p>12? А у меня 25.<br />Сталкиваюсь с подобным явлением не впервые. <br />Поэтому, если возможно, предпочитаю <a href="http://script-coding.com/WSH/Shell.html#6.3.4."><em>ShellFolderItem.ExtendedProperty()</em></a>.<br />В данном случае:<br /></p><div class="codebox"><pre><code>Folder.ParseName(Name).ExtendedProperty(&quot;WhenTaken&quot;)</code></pre></div><p>(или </p><div class="codebox"><pre><code>Folder.Items().Item(Name).ExtendedProperty(&quot;WhenTaken&quot;)</code></pre></div><p>).</p><p>В этом случае возвращемое значение имеет тип именно <em>Date</em>, а не <em>String</em>, т.е. к нему применима функция <em>DatePart()</em> (у меня, правда, не возникло ошибки и при применении её к строке, возвращённой <em>.GetDetailsOf()</em>).</p><p>Ещё замечу, что значения возвращаемые <em>GetDetailsOf</em> и <em>ExtendedProperty</em> (после преобразования в строку) всё-таки отличаются, у меня для одного и того же файла, соответственно:<br />«26.08.2012 11:35» и<br />«26.08.2012 08:35:30» — осмелюсь утверждать, что первично именно второе, а первое строится на его основе с потерей точности и учётом часового пояса.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2015-07-02T00:48:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94855#p94855</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94785#p94785" />
			<content type="html"><![CDATA[<p>Итоговая версия скрипта раскладывающая фото по дате съемки. Файлы у которых нет даты съемки, помещает в папку &quot;Без даты&quot;:</p><div class="codebox"><pre><code>Dim FSO, FldN, Fls, Fl, D, DtN, FlN
Set FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)

Do
    Set objFolder = CreateObject(&quot;Shell.Application&quot;).BrowseForFolder(0, &quot;Выберите каталог размещения файлов:&quot;, 0) 
    &#039;Если пользователь не выбрал папку, завершаем приложение &amp;H0001 + &amp;H4000
    If objFolder Is Nothing Then Exit Do
    &#039;Получаем путь к выбранной папке
    FldN = objFolder.Self.Path
    FoundColon = InStr(1,FldN,&quot;:&quot;,vbTextCompare)
    If FoundColon = 1 Then
        MsgBox &quot;Вы выбрали некорректную папку размещения файлов попробуйте еще раз!&quot;
    End if
Loop while(FoundColon = 1)

If objFolder Is Nothing Then
    MsgBox &quot;Не выбран каталог размещения файлов&quot;
Else

    If Not FSO.FolderExists(FldN) Then
        MsgBox &quot;Папка &quot;&quot;&quot; &amp; FldN &amp; &quot;&quot;&quot; не существует. &quot;, vbExclamation, &quot;Ошибка&quot;
        WScript.Quit
    End If

    Set Fls = FSO.GetFolder(FldN).Files

    Dim Path1, Folder, Name1, dd

    For Each Fl In Fls

        Path1 = FldN
        Name1 = Fl.Name
        &#039;MsgBox &quot;File is &quot; &amp;Fl.Name &amp;&quot; &quot; &amp;D &amp;&quot; = &quot; &amp;Fl.DateLastModified
        Set Folder = CreateObject(&quot;Shell.Application&quot;).NameSpace(Path1)
        dd = Folder.GetDetailsOf(Folder.ParseName(Name1), 12)
        &#039;D = GetDateName(dd)

        If dd = &quot;&quot; Then
            D = &quot;Нет_даты&quot;
        Else
            dd = Split(Replace(dd, Left(dd, 1), &quot;&quot;))(0)
            D = Day(dd)   : If Len(D) = 1 Then D = &quot;0&quot; &amp; D
            M = Month(dd) : If Len(M) = 1 Then M = &quot;0&quot; &amp; M
            D = Year(dd) &amp; &quot;.&quot; &amp; M &amp; &quot;.&quot; &amp; D
        End If
        
        DtN = FSO.BuildPath(FldN, D)
        If Not FSO.FolderExists(DtN) Then 
        
            Dim tt
            tt = &quot;Будет создана папка &quot; &amp;D &amp;&quot; и помещен файл &quot; &amp;Fl.Name &amp;&quot; &quot; &amp;D &amp;&quot; = &quot; &amp;Fl.DateLastModified
            &#039;Создание папок по запросу
            &#039;ExitFromName = MsgBox (tt, 36, &quot;Прекратить создание папки?&quot;) 
            
            If ExitFromName = 6 Then 
                Exit For
            End If  
        
            FSO.CreateFolder DtN
        End If

        FlN = FSO.BuildPath(DtN, Fl.Name)
        If FSO.FileExists(FlN) Then
            If MsgBox(&quot;Файл &quot;&quot;&quot; &amp; Fl.Name &amp; &quot;&quot;&quot; уже существует в папке &quot;&quot;&quot; &amp; D &amp; &quot;&quot;&quot;. &quot; &amp; vbCr &amp; &quot;Перезаписать?&quot;, vbQuestion + vbOKCancel, &quot;Внимание&quot;) = vbOK Then
                FSO.DeleteFile FlN, True
                Fl.Move FlN
            End If
        Else
            Fl.Move FlN
        End If

    Next

    MsgBox &quot;Скрипт завершен. &quot;, vbInformation, &quot;Финиш&quot;
    WScript.Quit

End If

</code></pre></div><p>Если нужно контролировать создание папок вручную можно снять комментарий в коде &quot;&#039;&quot;<br /></p><div class="codebox"><pre><code>&#039;ExitFromName = MsgBox (tt, 36, &quot;Прекратить создание папки?&quot;) </code></pre></div>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2015-06-28T12:54:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94785#p94785</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94782#p94782" />
			<content type="html"><![CDATA[<p>Можно вообще избавиться от функции. И не забыть про потенциально отсутствующие нули.<br /></p><div class="codebox"><pre><code>    dd = Folder.GetDetailsOf(Folder.ParseName(Name1), 12)
    dd = Split(Replace(dd, Left(dd, 1), &quot;&quot;))(0)
    D = Day(dd)   : If Len(D) = 1 Then D = &quot;0&quot; &amp; D
    M = Month(dd) : If Len(M) = 1 Then M = &quot;0&quot; &amp; M
    D = Year(dd) &amp; &quot;-&quot; &amp; M &amp; &quot;-&quot; &amp; D</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-06-27T21:58:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94782#p94782</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94781#p94781" />
			<content type="html"><![CDATA[<p>Решил так:</p><div class="codebox"><pre><code>Private Function GetDateName(Dt)

&#039;MsgBox Dt
DMY = Split(Dt,&quot;.&quot;)
YYYY = Split(DMY(2),&quot; &quot;)
GetDateName = DMY(0) &amp; &quot;-&quot; &amp; DMY(1) &amp; &quot;-&quot; &amp; YYYY(0)
MsgBox GetDateName

End Function</code></pre></div><p>Но думаю наверное можно более правильно это сделать.</p>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2015-06-27T21:07:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94781#p94781</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94780#p94780" />
			<content type="html"><![CDATA[<p>Наверное можно просто распарсить строку, точка разделитель.</p>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2015-06-27T20:58:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94780#p94780</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94779#p94779" />
			<content type="html"><![CDATA[<p>Спасибо получилось, Дату съемки получил, но теперь появилась другая ошибка когда произвожу перевод даты в другой формат.<br />Здесь пишет несоответствие типа:<br /></p><div class="codebox"><pre><code>      DateNow = Dt
    &#039; год
    y = DatePart(&quot;yyyy&quot;, DateNow) </code></pre></div><p>Это весь код:</p><div class="codebox"><pre><code>Dim FSO, FldN, Fls, Fl, D, DtN, FlN
Set FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)

&#039;If WScript.Arguments.Count = 0 Then
&#039;  MsgBox &quot;Не задано имя папки для распределения файлов по датам. &quot;, vbExclamation, &quot;Ошибка&quot;
&#039;  WScript.Quit
&#039;End If

Do
    Set objFolder = CreateObject(&quot;Shell.Application&quot;).BrowseForFolder(0, &quot;Выберите каталог размещения файлов:&quot;, 0) 
    &#039;Если пользователь не выбрал папку, завершаем приложение &amp;H0001 + &amp;H4000
    If objFolder Is Nothing Then Exit Do
    &#039;Получаем путь к выбранной папке
    objPath = objFolder.Self.Path

    FoundColon = InStr(1,objPath,&quot;:&quot;,vbTextCompare)
    &#039;msgBox FoundColon
    If FoundColon = 1 Then
        MsgBox &quot;Вы выбрали некорректную папку размещения файлов попробуйте еще раз!&quot;
    End if

Loop while(FoundColon = 1)

If objFolder Is Nothing Then
    MsgBox &quot;Не выбран каталог размещения файлов&quot;
    &#039;DynamicContent_Div.InnerHTML = &quot;Не выбран каталог размещения файлов&quot;
    
Else

FldN = objPath

&#039;FldN = WScript.Arguments(0)


If Not FSO.FolderExists(FldN) Then
  MsgBox &quot;Папка &quot;&quot;&quot; &amp; FldN &amp; &quot;&quot;&quot; не существует. &quot;, vbExclamation, &quot;Ошибка&quot;
  WScript.Quit
End If

Set Fls = FSO.GetFolder(FldN).Files




Dim Path1, Folder, Name1, dd
For Each Fl In Fls

    Path1 = FldN
    Name1 = Fl.Name
    
    &#039;MsgBox Path1
    
    &#039;MsgBox &quot;File is &quot; &amp;Fl.Name &amp;&quot; &quot; &amp;D &amp;&quot; = &quot; &amp;Fl.DateLastModified
    Set Folder = CreateObject(&quot;Shell.Application&quot;).NameSpace(Path1)
    dd = Folder.GetDetailsOf(Folder.ParseName(Name1), 12)
    D = GetDateName(dd)

    Dim tt
    tt = &quot;File is &quot; &amp;Fl.Name &amp;&quot; &quot; &amp;D &amp;&quot; = &quot; &amp;Fl.DateLastModified
    ExitFromName = MsgBox (tt, 36, &quot;Прекратить создание папки?&quot;) 
    &#039;MsgBox ExitFromName
    If ExitFromName = 6 Then 
        Exit For
    End If  

  DtN = FSO.BuildPath(FldN, D)
  If Not FSO.FolderExists(DtN) Then FSO.CreateFolder DtN

  FlN = FSO.BuildPath(DtN, Fl.Name)
  If FSO.FileExists(FlN) Then
    If MsgBox(&quot;Файл &quot;&quot;&quot; &amp; Fl.Name &amp; &quot;&quot;&quot; уже существует в папке &quot;&quot;&quot; &amp; D &amp; &quot;&quot;&quot;. &quot; &amp; vbCr &amp; &quot;Перезаписать?&quot;, vbQuestion + vbOKCancel, &quot;Внимание&quot;) = vbOK Then
      FSO.DeleteFile FlN, True
      Fl.Move FlN
    End If
  Else
    Fl.Move FlN
  End If
Next

MsgBox &quot;Скрипт завершен. &quot;, vbInformation, &quot;Финиш&quot;
WScript.Quit


End If

Private Function GetDateName(Dt)
  Dim y, m, d, h, n, s
  

  
      DateNow = Dt
    &#039; год
    y = DatePart(&quot;yyyy&quot;, DateNow) 
    &#039; месяц
    m = DatePart(&quot;m&quot;, DateNow) 
    &#039; день
    d = DatePart(&quot;d&quot;, DateNow) 
    &#039;чаc
    h = DatePart(&quot;h&quot;, DateNow) 
    &#039;минута
    n = DatePart(&quot;n&quot;, DateNow) 
    &#039;секунда
    s = DatePart(&quot;s&quot;, DateNow) 
    
    If Len(m) = 1 Then
        m = &quot;0&quot; &amp;m
    End If
    
    If Len(d) = 1 Then
        d = &quot;0&quot; &amp;d
    End If
    
    If Len(h) = 1 Then
        h = &quot;0&quot; &amp;h
    End If
    
    If Len(n) = 1 Then
        n = &quot;0&quot; &amp;n
    End If
    
    If Len(s) = 1 Then
        s = &quot;0&quot; &amp;s
    End If
        
    NameDDMMYYYY = d &amp;&quot;_&quot; &amp;m &amp;&quot;_&quot; &amp;y
    NameHHNNSS = h &amp;&quot;_&quot; &amp;n &amp;&quot;_&quot; &amp;s

    
    

  GetDateName = y &amp; &quot;-&quot; &amp; m &amp; &quot;-&quot; &amp; d
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2015-06-27T20:26:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94779#p94779</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94778#p94778" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Path = &quot;C:\Fotos&quot;
Name = &quot;File.jpg&quot;
Set Folder = CreateObject(&quot;Shell.Application&quot;).NameSpace(Path)
MsgBox Folder.GetDetailsOf(Folder.ParseName(Name), 12)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-06-27T18:58:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94778#p94778</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Перенос фото в папку с датой съемки]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94777#p94777" />
			<content type="html"><![CDATA[<p>Доброго времени суток </p><p>Написал код для сортировки фото по дате съемки, но есть проблема не могу считать из фото дату съемки могу считать только дату изменения. Может кто сможет подсказать как считать &quot;Дату съемок&quot; фото<br /></p><div class="codebox"><pre><code>Dim FSO, FldN, Fls, Fl, D, DtN, FlN
Set FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)

&#039;If WScript.Arguments.Count = 0 Then
&#039;  MsgBox &quot;Не задано имя папки для распределения файлов по датам. &quot;, vbExclamation, &quot;Ошибка&quot;
&#039;  WScript.Quit
&#039;End If

Do
    Set objFolder = CreateObject(&quot;Shell.Application&quot;).BrowseForFolder(0, &quot;Выберите каталог размещения файлов:&quot;, 0) 
    &#039;Если пользователь не выбрал папку, завершаем приложение &amp;H0001 + &amp;H4000
    If objFolder Is Nothing Then Exit Do
    &#039;Получаем путь к выбранной папке
    objPath = objFolder.Self.Path

    FoundColon = InStr(1,objPath,&quot;:&quot;,vbTextCompare)
    &#039;msgBox FoundColon
    If FoundColon = 1 Then
        MsgBox &quot;Вы выбрали некорректную папку размещения файлов попробуйте еще раз!&quot;
    End if

Loop while(FoundColon = 1)

If objFolder Is Nothing Then
    MsgBox &quot;Не выбран каталог размещения файлов&quot;
    &#039;DynamicContent_Div.InnerHTML = &quot;Не выбран каталог размещения файлов&quot;
    
Else

FldN = objPath

&#039;FldN = WScript.Arguments(0)


If Not FSO.FolderExists(FldN) Then
  MsgBox &quot;Папка &quot;&quot;&quot; &amp; FldN &amp; &quot;&quot;&quot; не существует. &quot;, vbExclamation, &quot;Ошибка&quot;
  WScript.Quit
End If

Set Fls = FSO.GetFolder(FldN).Files
For Each Fl In Fls
  D = GetDateName(Fl.DateLastModified)
  
&#039;  MsgBox &quot;File is &quot; &amp;Fl.Name &amp;&quot; &quot; &amp;D &amp;&quot; = &quot; &amp;Fl.DateLastModified
  Dim tt
  tt = &quot;File is &quot; &amp;Fl.Name &amp;&quot; &quot; &amp;D &amp;&quot; = &quot; &amp;Fl.DateLastModified
    ExitFromName = MsgBox (tt, 36, &quot;Прекратить создание папки?&quot;) 
    &#039;MsgBox ExitFromName
    If ExitFromName = 6 Then 
        Exit For
    End If  
  
  
  DtN = FSO.BuildPath(FldN, D)
  If Not FSO.FolderExists(DtN) Then FSO.CreateFolder DtN

  FlN = FSO.BuildPath(DtN, Fl.Name)
  If FSO.FileExists(FlN) Then
    If MsgBox(&quot;Файл &quot;&quot;&quot; &amp; Fl.Name &amp; &quot;&quot;&quot; уже существует в папке &quot;&quot;&quot; &amp; D &amp; &quot;&quot;&quot;. &quot; &amp; vbCr &amp; &quot;Перезаписать?&quot;, vbQuestion + vbOKCancel, &quot;Внимание&quot;) = vbOK Then
      FSO.DeleteFile FlN, True
      Fl.Move FlN
    End If
  Else
    Fl.Move FlN
  End If
Next

MsgBox &quot;Скрипт завершен. &quot;, vbInformation, &quot;Финиш&quot;
WScript.Quit


End If
        
        


Private Function GetDateName(Dt)
  Dim M, D

  M = Month(Dt)
  D = Day(Dt)
  If M &lt; 10 Then M = &quot;0&quot; &amp; M
  If D &lt; 10 Then D = &quot;0&quot; &amp; D

  GetDateName = Year(Dt) &amp; &quot;-&quot; &amp; M &amp; &quot;-&quot; &amp; D
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wildwolf007]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30994</uri>
			</author>
			<updated>2015-06-27T18:45:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94777#p94777</id>
		</entry>
</feed>
