<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13188</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13188&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: копирование с USB в папку на компьютере, с проверками».]]></description>
		<lastBuildDate>Sun, 12 Nov 2017 21:48:26 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121104#p121104</link>
			<description><![CDATA[<p>Задайте все необходимые переменные (диск-источник и папку назаначения) в самом начале скрипта и проверьте.</p>]]></description>
			<author><![CDATA[null@example.com (AlexanderG)]]></author>
			<pubDate>Sun, 12 Nov 2017 21:48:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121104#p121104</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121103#p121103</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (EugeneBY)]]></author>
			<pubDate>Sun, 12 Nov 2017 19:50:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121103#p121103</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121091#p121091</link>
			<description><![CDATA[<p>Не хватает инструкции &quot;NEXT&quot; (скорее всего строкой перед &quot;End Sub&quot;).</p>]]></description>
			<author><![CDATA[null@example.com (AlexanderG)]]></author>
			<pubDate>Sun, 12 Nov 2017 18:21:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121091#p121091</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121090#p121090</link>
			<description><![CDATA[<p>Проверить возможности нет, но помоему не закрыт цикл <strong>FOR</strong> в процедуре.</p>]]></description>
			<author><![CDATA[null@example.com (AlexanderG)]]></author>
			<pubDate>Sun, 12 Nov 2017 18:16:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121090#p121090</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121088#p121088</link>
			<description><![CDATA[<p><strong>AlexanderG</strong> В последней строке, где End Sub</p>]]></description>
			<author><![CDATA[null@example.com (EugeneBY)]]></author>
			<pubDate>Sun, 12 Nov 2017 18:06:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121088#p121088</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121083#p121083</link>
			<description><![CDATA[<p>На какой строке ошибка? (указано в сообщении)</p>]]></description>
			<author><![CDATA[null@example.com (AlexanderG)]]></author>
			<pubDate>Sun, 12 Nov 2017 17:31:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121083#p121083</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: копирование с USB в папку на компьютере, с проверками]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=121031#p121031</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (EugeneBY)]]></author>
			<pubDate>Sat, 11 Nov 2017 19:11:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=121031#p121031</guid>
		</item>
	</channel>
</rss>
