<?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=11668&amp;type=atom" />
	<updated>2016-06-07T17:57:38Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11668</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Копировани файлов без перезаписи]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104893#p104893" />
			<content type="html"><![CDATA[<p>Стратегически мысль верная, т.к. в методе такой опции <a href="https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb787866(v=vs.85).aspx">нет</a>, поэтому придётся проверять по </p><div class="codebox"><pre><code>If Not FSO.FileExists(FSO.BuildPath(FolderNet, file.name))</code></pre></div><p>Если бы задача стояла иначе, то можно было бы копировать без цикла по *.* (опция - 128) или .Items).<br />Насчёт прерванной связи не в курсе, под рукой нет сетевого.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2016-06-07T17:57:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104893#p104893</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Копировани файлов без перезаписи]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104889#p104889" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong></p><p>Нашёл способ копировать пофайлово. <br />Даже сделал вариант с&nbsp; CopyHere</p><br /><p>Вот он.</p><br /><br /><div class="codebox"><pre><code>
Set objWshNetwork = CreateObject(&quot;WScript.Network&quot;)
Set objShell = CreateObject(&quot;Shell.Application&quot;)
On Error Resume Next
objWshNetwork.RemoveNetworkDrive &quot;n:&quot;, True, True
Err.Clear()

objWshNetwork.MapNetworkDrive &quot;n:&quot;,&quot;\\132.316.313.315\sare&quot;, &quot;true&quot;,&quot;networkuser&quot;,&quot;fgdfgdsM&quot; 
If Err.Number Then
	WScript.echo &quot;Сетевой диск не подключился. Сообщите об этом администратору.&quot; &amp; &quot; &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
Else
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Dim fso, FolderNet, FolderLocal 
FolderLocal = &quot;C:\Users\&quot;   
FolderNet =&quot;n:\goto&quot;

Set LogFile = FSO.OpenTextFile(&quot;C:\Distr\copy.log&quot;, 8, True)
LogFile.WriteLine &quot; &quot;
LogFile.WriteLine Now &amp; &quot; --- Начало процесса копирования ---&quot;

If Not FSO.FolderExists(FolderLocal) Then
    LogFile.WriteLine Now &amp; &quot; ------ Папка: &#039;&quot; &amp; FolderLocal &amp; &quot;&#039; - не существует&quot;
&#039;    WScript.echo &quot;Папка: &quot; &amp; &quot; &quot; &amp; FolderLocal &amp; &quot; : не существует&quot;

If Not FSO.FolderExists(FolderNet) Then
    LogFile.WriteLine Now &amp; &quot; ------ Папка: &#039;&quot; &amp; FolderNet &amp; &quot;&#039; - не существует&quot;
&#039;    WScript.echo &quot;Папка: &quot; &amp; &quot; &quot; &amp; FolderNet &amp; &quot; : не существует&quot;
LogFile.Close
WScript.Quit
End If
End If

Set objFolder = fso.GetFolder(FolderLocal)
Set objColFiles = objFolder.Files

For Each file In objColFiles

LogFile.WriteLine Now &amp; &quot; ===== Файл: &quot; &amp;&quot;&#039;&quot; &amp; file.Name &amp; &quot;&#039; - &quot; &amp; round(file.Size/1024,2) &amp; &quot;КБ&quot; &amp;  &quot; Начало обработки.&quot;
   objShell.NameSpace(FolderNet).CopyHere FolderLocal &amp; &quot;\&quot; &amp; file.Name
     If Err.Number &lt;&gt; 0 And Err.Number &lt;&gt; 58 Then
      LogFile.WriteLine Now &amp; &quot; ------ Копирование прошло с ошибками. &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
      WScript.echo &quot;Копирование прошло с ошибками. Сообщите об этом администратору.&quot; &amp; &quot; &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
     else
      LogFile.WriteLine Now &amp; &quot; ======Файл: &quot; &amp;&quot;&#039;&quot; &amp; file.Name &amp;&quot;&#039;&quot; &amp; &quot; Скопирован или существует.&quot;
    End If

Next


objWshNetwork.RemoveNetworkDrive &quot;n:&quot;, True, True
LogFile.WriteLine Now &amp; &quot; --- Конец процесса копирования ---&quot;
LogFile.Close
End if








</code></pre></div><p>Но всплыли опять грабли<br />Файл в папке назначения создаётся сразу и размером как и исходный файл.<br />Если например прервалась связь, остаётся битый файл. Размером и именем не отличающийся от оригинала.</p><p>И с CopyHere не понял как не заменять имеющиеся файлы вообще.</p><p>Стратегически, как я думаю, нужно копать в сторону предварительной проверки наличия и сравнения файлов. И копировать только то чего не хватает.</p>]]></content>
			<author>
				<name><![CDATA[TAluberT]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33941</uri>
			</author>
			<updated>2016-06-07T16:52:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104889#p104889</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Копировани файлов без перезаписи]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104778#p104778" />
			<content type="html"><![CDATA[<p>По логике он должен пропускать файлы, которые уже есть в папке, а также те, у которых нет расширений.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2016-06-06T10:50:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104778#p104778</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Копировани файлов без перезаписи]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104761#p104761" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>Критерием может быть запрет на скрытые/системные файлы.</p></blockquote></div><p>В том-то и дело, что нет.<br /> Для экспиремента. Взял большой файл и насоздавал кучу маленьких, правой кнопкой мыши.<br />Если папка назначения пуста, скрипт копирует все, если нет то он пропускает файлы начинающиеся со слова &quot;Новый&quot; или &quot;Рисунок&quot; и при этом копирует Многие другие, например начинающиеся со слова &quot;Архив&quot; </p><p>Если в папке назначения после прогона скрипта&nbsp; удалить файл с &quot;Архив&quot; он его при повторном запуске скрипта тоже заново не копирует.<br />Что-то я делаю не так...</p>]]></content>
			<author>
				<name><![CDATA[TAluberT]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33941</uri>
			</author>
			<updated>2016-06-06T08:45:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104761#p104761</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Копировани файлов без перезаписи]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104649#p104649" />
			<content type="html"><![CDATA[<p>Критерием может быть запрет на скрытые/системные файлы.<br />Скрипт можно сократить:<br /></p><div class="codebox"><pre><code>Set objWshNetwork = CreateObject(&quot;WScript.Network&quot;)
On Error Resume Next
objWshNetwork.MapNetworkDrive &quot;n:&quot;,&quot;\\111.116.113.115\\Журналы событий&quot;, &quot;true&quot;,&quot;networkuser&quot;,&quot;XXX&quot; 
If Err.Number Then
	WScript.echo &quot;Копирование прошло с ошибками. Сообщите об этом администратору.&quot;&amp; &quot; &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
Else
	CreateObject(&quot;Scripting.FileSystemObject&quot;).CopyFile &quot;C:\Users\*.*&quot;, &quot;N:\goto\&quot;, 0
    If Err.Number &lt;&gt; 0 And Err.Number &lt;&gt; 58 Then _
    WScript.echo &quot;Копирование прошло с ошибками. Сообщите об этом администратору.&quot; &amp; &quot; &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
End If
objWshNetwork.RemoveNetworkDrive &quot;n:&quot;, True, True</code></pre></div><p>Чтобы избежать проблемы можно попробовать CopyHere.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2016-06-03T15:00:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104649#p104649</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Копировани файлов без перезаписи]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=104646#p104646" />
			<content type="html"><![CDATA[<p>Добрый день.</p><p>Начал изучать vbs c простой задачи: </p><p> Подключить сетевой диск, от определённого пользователя.<br />&nbsp; Скопировать на него несколько файлов, перезаписывать не нужно.<br />&nbsp; &nbsp;Отключить сетевой диск.</p><p>Проблема в следующем <br /> Эта редиска копирует вновь созданные файлы, но только какие ему нравятся, критерий понять не могу.</p><p>Если поставить перезапись, то все файлы копируются.</p><div class="codebox"><pre><code>
On Error Resume Next
Set objWshNetwork = CreateObject( &quot;WScript.Network&quot; )
Set objShell = CreateObject(&quot;Shell.Application&quot;)
objWshNetwork.MapNetworkDrive &quot;n:&quot;,&quot;\\111.116.113.115\\Журналы событий&quot;, &quot;true&quot;,&quot;networkuser&quot;,&quot;XXX&quot; 
    If Err.Number Then
      WScript.echo &quot;Копирование прошло с ошибками. Сообщите об этом администратору.&quot;&amp; &quot; &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
   else
Dim fso, FolderName2, FolderName1 

Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
FolderName1 = &quot;C:\Users\*.*&quot;   
FolderName2 =&quot;N:\goto&quot;

fso.CopyFile FolderName1, FolderName2, 0
    If Err.Number Then
     If Err.Number &lt;&gt; 58 Then
      WScript.echo &quot;Копирование прошло с ошибками. Сообщите об этом администратору.&quot;&amp; &quot; &quot; &amp; Err.Number &amp; &quot; - &quot;  &amp; Err.Description
     End if
    End if
  End if
WScript.Sleep 60000*0.2
objWshNetwork.RemoveNetworkDrive &quot;n:&quot;, true, true  

.</code></pre></div>]]></content>
			<author>
				<name><![CDATA[TAluberT]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33941</uri>
			</author>
			<updated>2016-06-03T14:22:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=104646#p104646</id>
		</entry>
</feed>
