Показать полную графическую версию : [решено] перемещение N файлов из папки в папку
Приветствую всех!
Есть задача.
Нужен 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
к сожалению не могу придумать вменяемую проверку используется переносимый файл или нет так как открытые на запись файлы у меня получается переименовывать и даже удалять
Спасибо!
Хотел уточнить, в приведенном скрипте перемещаются все файлы из папки в папку я так понимаю, а нужно, чтобы количество задавалось как параметр, т.е. прописываем в скрипте параметр, например, 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
Для учета расширений файлов добавил пару строк, отпишитесь если верно
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.