PDA

Показать полную графическую версию : перемещение файлов


NibelungXXX
01-12-2013, 19:47
необходимо перемещать по 50 файлов в папку D:\in с папки D:\pak если папка D:\in пуста.


Разобрался и уже написал)

Iska
02-12-2013, 05:23
2) необходимо перемещать по 50 файлов в папку D:\in с папки D:\pak если папка D:\pak пуста. »
Если папка «D:\pak» пуста, как можно оттуда что-то перемещать?

NibelungXXX
02-12-2013, 05:45
Ачепятка вышла, если папка D:\in конечно становится пуста

Iska
04-12-2013, 06:21
NibelungXXX, на WSH:
Option Explicit

Dim strSourceFolder
Dim strDestFolder

Dim objFSO

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemSink


strSourceFolder = "E:\Песочница\0334\Source"
strDestFolder = "E:\Песочница\0334\Destination"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
If objFSO.FolderExists(strDestFolder) Then
strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")

With objSWbemServicesEx.Get("Win32_Directory.Name='" & Replace(strDestFolder & "\.", "\", "\\") & "'")
objSWbemServicesEx.ExecNotificationQueryAsync objSWbemSink, _
"SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
"TargetInstance ISA 'CIM_DataFile' AND " & _
"TargetInstance.Drive = '" & .Drive & "' AND " & _
"TargetInstance.Path = '" & .Path & "'"

Do
WScript.Sleep 100
Loop

objSWbemSink.Cancel

Set objSWbemSink = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing
End With
Else
WScript.Echo "Destination folder [" & strDestFolder & "] not found."
WScript.Quit 2
End If
Else
WScript.Echo "Source folder [" & strSourceFolder & "] not found."
WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub Sink_OnObjectReady(objSWbemObjectEx, objSWbemAsyncContext)
Const intMaxCount = 5

Dim intCount
Dim objFile

If objSWbemObjectEx.Path_.Class = "__InstanceDeletionEvent" Then
If objFSO.GetFolder(strDestFolder).Files.Count = 0 Then
intCount = 0

For Each objFile In objFSO.GetFolder(strSourceFolder).Files
objFile.Move strDestFolder & "\"

intCount = intCount + 1

If intCount >= intMaxCount Then
Exit For
End If
Next
End If
End If
End Sub
'=============================================================================

Есть ряд тонкостей.

Поскольку критерием инициации процесса было задано отсутствие файлов во второй папке, и в скрипте используется подписка на события удаления файлов из второй папки, то первая тонкость такова: если в момент запуска скрипта вторая папка была уже пуста — нужно создать в ней/скопировать в неё какой-либо файл и затем сразу удалить его. Вторая тонкость: если в момент работы скрипта обе папки окажутся пустыми, то он никак не отреагирует на добавление файлов в первую папку, и опять понадобится проделать ту же самую операцию — создать во второй папке/скопировать в неё какой-либо файл и затем сразу удалить его.

Чтобы избавиться от подобных «тараканов», нужно в столовой, где я работаю, взять полпорции суточных щей… изменить техзадание, и следить не только за состоянием второй папки (события удаления файла), но и за состоянием первой, исходной папки (события создания файлов).




© OSzone.net 2001-2012