<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13188&amp;type=atom" />
	<updated>2017-11-12T21:48:26Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13188</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121104#p121104" />
			<content type="html"><![CDATA[<p>Задайте все необходимые переменные (диск-источник и папку назаначения) в самом начале скрипта и проверьте.</p>]]></content>
			<author>
				<name><![CDATA[AlexanderG]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33103</uri>
			</author>
			<updated>2017-11-12T21:48:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121104#p121104</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121103#p121103" />
			<content type="html"><![CDATA[<p><strong>AlexanderG</strong> Спасибо, закрыл цикл, вставил NEXT. Теперь ошибка на строке №5. Я понимаю, что strSource ещё неизвестна, но как её объявить в начале? И из процедуры usbDrive пробовал кусок кода между 4 и 5 вставить, с 28 по 34 строки, так другую ошибку выдаёт. Попробую ещё сам в литературе покопаться, рекомемндовали Гюнтера Борна, &quot;Руководство разработчика на Microsoft Windows Script Host 2.0. Мастер-класс&quot;. Но по отдельности каждая операция вроде и понятна, а вот как это грамотно слепить в единое целое, пока не могу дойти.<br /></p><div class="codebox"><pre><code>
strTarget = Trim(InputBox(&quot;set path to copy&quot;))
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objShellApp = CreateObject(&quot;Shell.Application&quot;)
Set tFolder = fso.GetFolder(strTarget)
Set sDrive = fso.GetDrive(strSource)
Set sFolder = fso.GetFolder(strSource)   &#039; флешка-источник

If Age&gt;30 Then
	Set lDrive = tFolder.Drive.DriveLetter  &#039; получаем диск папки назначения
	Set uDrive = sDrive.DriveLetter &#039; получаем диск папки-источника
	drFree = (FormatNumber(lDrive.AvailableSpace/1024, 0) - (FormatNumber(uDrive.TotalSize/1024, 0) - FormatNumber(uDrive.AvailableSpace/1024, 0)) - 1024)
	If drFree &gt; 0 Then
	usbDrive
	sFolder.Copy tFolder
	Else
	WScript.Echo(&quot;Not enough space on destination drive&quot;)
	End If
	WScript.Echo(&quot;Destination folder was in use in last 30 days&quot;)
End If

&#039;======================================
Function Age(tFolder)
	Age = DateDiff(&quot;d&quot;, tFolder.DateLasModified, Now())
End Function

&#039;======================================
Sub usbDrive
Set objWMIService = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\CIMV2&quot;) 
Set objEvents = objWMIService.ExecNotificationQuery _
(&quot;SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE &quot; &amp; _
	&quot;TargetInstance ISA &#039;Win32_LogicalDisk&#039;&quot; &amp; _
	&quot; AND TargetInstance.DriveType = 2&quot;)
	Set objReceivedEvent = objEvents.NextEvent
	Set strSource = objReceivedEvent.TargetInstance.Name
	Set Folder = fso.GetFolder(strSource)
	For Each File In Folder.Files
	Do While True
	WScript.Echo File.Name
	Set logLine = &quot;VolumeType:&quot; &amp; objReceivedEvent.TargetInstance.DriveType &amp; VbCrLf &amp; _
	&quot;VolumeName: &quot; &amp; objReceivedEvent.TargetInstance.VolumeName
	Set Folder = FSO.GetFolder(strTarget)
	Set TextStream = Folder.CreateTextFile(&quot;log.txt&quot;)
	TextStream.WriteLine logLine
	TextStream.Close
	set logFile = fso.GetFile(strTarget &amp; &quot;log.txt&quot;) &#039; как получить только что созданный файл, чтобы назначить ему атрибут?
	logFile.Attributes = 2
	Loop
	Next
End Sub
</code></pre></div><p>Ну и рекомендовали ещё для проверки свободного местазаписать If .AvailableSpace &gt; [bytes], хотя это не учитывает объём флешки и объём копируемых файлов. Ну и раз нужно искать только USB-флеш-накопители, то проще смотреть по if sDrive.DriveType = 1 And sDrive.IsReady. Если нужна конкретная флешка, то — по if sDrive.SerialNumber = [№] And sDrive.IsReady. Попробую реализовать.</p>]]></content>
			<author>
				<name><![CDATA[EugeneBY]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=38866</uri>
			</author>
			<updated>2017-11-12T19:50:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121103#p121103</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121091#p121091" />
			<content type="html"><![CDATA[<p>Не хватает инструкции &quot;NEXT&quot; (скорее всего строкой перед &quot;End Sub&quot;).</p>]]></content>
			<author>
				<name><![CDATA[AlexanderG]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33103</uri>
			</author>
			<updated>2017-11-12T18:21:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121091#p121091</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121090#p121090" />
			<content type="html"><![CDATA[<p>Проверить возможности нет, но помоему не закрыт цикл <strong>FOR</strong> в процедуре.</p>]]></content>
			<author>
				<name><![CDATA[AlexanderG]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33103</uri>
			</author>
			<updated>2017-11-12T18:16:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121090#p121090</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121088#p121088" />
			<content type="html"><![CDATA[<p><strong>AlexanderG</strong> В последней строке, где End Sub</p>]]></content>
			<author>
				<name><![CDATA[EugeneBY]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=38866</uri>
			</author>
			<updated>2017-11-12T18:06:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121088#p121088</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121083#p121083" />
			<content type="html"><![CDATA[<p>На какой строке ошибка? (указано в сообщении)</p>]]></content>
			<author>
				<name><![CDATA[AlexanderG]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33103</uri>
			</author>
			<updated>2017-11-12T17:31:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121083#p121083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=121031#p121031" />
			<content type="html"><![CDATA[<p>Попросили помочь в написании скрипта, а я сам не особо в этом шарю. Задача такова:<br /><strong>Определить, изменялась ли заданная пользователем папка за последний месяц. Если нет, скопировать в нее файлы со съемного носителя. Проверить наличие съемного носителя, вывести список имеющихся на ней файлов и&nbsp; удостовериться, что на рабочем диске достаточно места.&nbsp; Создать файл, записав туда тип диска, с которого выполнялось копирование и его метку. Файлу присвоить атрибут «Скрытый».</strong><br />Порылся по форуму, почитал немного литературу, и слепил такого Франкенштейна.<br /></p><div class="codebox"><pre><code>
strTarget = Trim(InputBox(&quot;set path to copy&quot;))
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objShellApp = CreateObject(&quot;Shell.Application&quot;)
Set tFolder = fso.GetFolder(strTarget)
Set sDrive = fso.GetDrive(strSource)
Set sFolder = fso.GetFolder(strSource)   &#039; флешка-источник

If Age&gt;30 Then
	Set lDrive = tFolder.Drive.DriveLetter  &#039; получаем диск папки назначения
	Set uDrive = sDrive.DriveLetter &#039; получаем диск папки-источника
	drFree = (FormatNumber(lDrive.AvailableSpace/1024, 0) - (FormatNumber(uDrive.TotalSize/1024, 0) - FormatNumber(uDrive.AvailableSpace/1024, 0)) - 1024)
	If drFree &gt; 0 Then
	usbDrive
	sFolder.Copy tFolder
	Else
	WScript.Echo(&quot;Not enough space on destination drive&quot;)
	End If
	WScript.Echo(&quot;Destination folder was in use in last 30 days&quot;)
End If

&#039;======================================
Function Age(tFolder)
	Age = DateDiff(&quot;d&quot;, tFolder.DateLasModified, Now())
End Function

&#039;======================================
Sub usbDrive
Set objWMIService = GetObject(&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\CIMV2&quot;) 
Set objEvents = objWMIService.ExecNotificationQuery _
(&quot;SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE &quot; &amp; _
	&quot;TargetInstance ISA &#039;Win32_LogicalDisk&#039;&quot; &amp; _
	&quot; AND TargetInstance.DriveType = 2&quot;)
	Set objReceivedEvent = objEvents.NextEvent
	Set strSource = objReceivedEvent.TargetInstance.Name
	Set Folder = fso.GetFolder(strSource)
	For Each File In Folder.Files
	WScript.Echo File.Name
	Set logLine = &quot;VolumeType:&quot; &amp; objReceivedEvent.TargetInstance.DriveType &amp; VbCrLf &amp; _
	&quot;VolumeName: &quot; &amp; objReceivedEvent.TargetInstance.VolumeName
	Set Folder = FSO.GetFolder(strTarget)
	Set TextStream = Folder.CreateTextFile(&quot;log.txt&quot;)
	TextStream.WriteLine logLine
	TextStream.Close
	set logFile = fso.GetFile(strTarget &amp; &quot;log.txt&quot;) &#039; как получить только что созданный файл, чтобы назначить ему атрибут?
	logFile.Attributes = 2
End Sub

</code></pre></div><p>Теперь вопросы по порядку:<br />1. Проверка последнего использования папки в функции Age, скрипт нашёл на форуме, по идее проблем быть не должно;<br />2. Проверка наличия свободного места. Что думаете по этому поводу?<br />3. Проверка наличия съёмного носителя, находил на форуме, вроде вставил правильно. Но есть сомнения.<br />4. С записью в текстовый файл информации о флешке вроде не должно быть, но вот как затем его сделать скрытым...<br />5. Ну и собственно организовать копирование. Корректно ли я его сделал.<br />Ну и при запуске выдаёт ошибку на последней строке. <strong>Ошибка: предполагается наличие инструкций</strong></p>]]></content>
			<author>
				<name><![CDATA[EugeneBY]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=38866</uri>
			</author>
			<updated>2017-11-11T19:11:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=121031#p121031</id>
		</entry>
</feed>
