Войти

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


Romano
26-11-2011, 18:22
Приветствую всех!

Есть задача.

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

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

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


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

Loran_rus
30-11-2011, 14:52
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
Спасибо!

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

Loran_rus
02-12-2011, 07:31
Тогда так
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
Для учета расширений файлов добавил пару строк, отпишитесь если верно


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
object.GetExtensionName(path) Возвращает строковое значение расширения последнего компонента в указанном пути.
Так что TargetPath хоть и содержит путь назначения \\ServerName\Folder2\ последний его компонент является именем (вместе с расширением) обрабатываемого файла и методу не важно что написано до последнего символа \ можно даже TargetPath заменить на File.Name. Единственное что могу порекомендовать это вписать оба параметра в одно условие
If Not objFSO.FileExists(TargetPath) and LCase(objFSO.GetExtensionName(File.Name)) = "rtf" Then




© OSzone.net 2001-2012