Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   перемещение файлов (http://forum.oszone.net/showthread.php?t=273170)

NibelungXXX 01-12-2013 19:47 2265037

перемещение файлов
 
необходимо перемещать по 50 файлов в папку D:\in с папки D:\pak если папка D:\in пуста.


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

Iska 02-12-2013 05:23 2265309

Цитата:

Цитата NibelungXXX
2) необходимо перемещать по 50 файлов в папку D:\in с папки D:\pak если папка D:\pak пуста. »

Если папка «D:\pak» пуста, как можно оттуда что-то перемещать?

NibelungXXX 02-12-2013 05:45 2265312

Ачепятка вышла, если папка D:\in конечно становится пуста

Iska 04-12-2013 06:21 2266610

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
'=============================================================================


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

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

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


Время: 02:53.

Время: 02:53.
© OSzone.net 2001-