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

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

Romano 26-11-2011 18:22 1803849

перемещение N файлов из папки в папку
 
Приветствую всех!

Есть задача.

Нужен VBS скрипт, который будет автоматизировать следующую операцию:

Есть папка на сетевом ресурсе \\ServerName\Folder1, в которую регулярно формируются файлы формата *.rtf (могут быть открыты на запись, заняты).
Необходимо из каталога \\ServerName\Folder1 перемещать N-ое количество *.rtf файлов в каталог \\ServerName\Folder2 с определенной периодичностью (регулируется интервалом запуска скрипта в планировщике Windows), пока из папки Folder1 не переместятся все файлы.

Желательно, чтобы была предусмотрена проверка наличия файлов с одинаковым именем в папках Folder1 и Folder2. Если из Folder1 пытается переместиться файл, который уже есть в Folder2, то пропускать его.


Заранее спасибо!

Loran_rus 30-11-2011 14:52 1806475

Код:

Set objFSO = CreateObject("Scripting.FileSystemObject")

SourceFolder = "\\ServerName\Folder1\"
DestFolder = "\\ServerName\Folder2\"

For Each File In objFSO.GetFolder(SourceFolder).Files
        TargetPath = DestFolder+File.Name
                If Not objFSO.FileExists(TargetPath) Then
                        objFSO.MoveFile File.Path, DestFolder
                End If
Next

к сожалению не могу придумать вменяемую проверку используется переносимый файл или нет так как открытые на запись файлы у меня получается переименовывать и даже удалять

Romano 01-12-2011 17:38 1807397

Спасибо!

Хотел уточнить, в приведенном скрипте перемещаются все файлы из папки в папку я так понимаю, а нужно, чтобы количество задавалось как параметр, т.е. прописываем в скрипте параметр, например, NumberOfFiles=5 и запускаем скрипт раз в 10 сек. В итоге раз в 10 сек из папки Folder1 переместится 5 файлов в папку Folder2. Т.е. нужно "дозированное" перемещение.

Loran_rus 02-12-2011 07:31 1807754

Тогда так
Код:

Set objFSO = CreateObject("Scripting.FileSystemObject")

NumberOfFiles = 5
SourceFolder = "\\ServerName\Folder1\"
DestFolder = "\\ServerName\Folder2\"

For Each File In objFSO.GetFolder(SourceFolder).Files
        TargetPath = DestFolder+File.Name
                If Not objFSO.FileExists(TargetPath) Then
                        If NumberOfFiles = 0 Then
                                Exit For
                        End if
                        objFSO.MoveFile File.Path, DestFolder
                        NumberOfFiles = NumberOfFiles-1
                End If
Next


Romano 06-12-2011 15:07 1810363

Для учета расширений файлов добавил пару строк, отпишитесь если верно


Код:

Set objFSO = CreateObject("Scripting.FileSystemObject")

NumberOfFiles = 5
SourceFolder = "\\ServerName\Folder1\"
DestFolder = "\\ServerName\Folder2\"


For Each File In objFSO.GetFolder(SourceFolder).Files
        TargetPath = DestFolder+File.Name
       
          If LCase(objFSO.GetExtensionName(TargetPath)) = "rtf" Then '<-----
         
                If Not objFSO.FileExists(TargetPath) Then
                        If NumberOfFiles = 0 Then
                                Exit For
                        End if
                        objFSO.MoveFile File.Path, DestFolder
                        NumberOfFiles = NumberOfFiles-1
                End If
       
        End If                                  '<-----
Next


Loran_rus 06-12-2011 21:08 1810575

object.GetExtensionName(path) Возвращает строковое значение расширения последнего компонента в указанном пути.
Так что TargetPath хоть и содержит путь назначения \\ServerName\Folder2\ последний его компонент является именем (вместе с расширением) обрабатываемого файла и методу не важно что написано до последнего символа \ можно даже TargetPath заменить на File.Name. Единственное что могу порекомендовать это вписать оба параметра в одно условие
Код:

If Not objFSO.FileExists(TargetPath) and LCase(objFSO.GetExtensionName(File.Name)) = "rtf" Then


Время: 17:07.

Время: 17:07.
© OSzone.net 2001-