Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] перемещение N файлов из папки в папку

Ответить
Настройки темы
VBS/WSH/JS - [решено] перемещение N файлов из папки в папку

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Приветствую всех!

Есть задача.

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

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

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


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

Отправлено: 18:22, 26-11-2011

 

Новый участник


Сообщения: 42
Благодарности: 13

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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
к сожалению не могу придумать вменяемую проверку используется переносимый файл или нет так как открытые на запись файлы у меня получается переименовывать и даже удалять

Последний раз редактировалось Loran_rus, 30-11-2011 в 14:56. Причина: орфографическая ошибка

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:52, 30-11-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо!

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

Отправлено: 17:38, 01-12-2011 | #3


Новый участник


Сообщения: 42
Благодарности: 13

Профиль | Отправить PM | Цитировать


Тогда так
Код: Выделить весь код
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:31, 02-12-2011 | #4


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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


Код: Выделить весь код
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

Отправлено: 15:07, 06-12-2011 | #5


Новый участник


Сообщения: 42
Благодарности: 13

Профиль | Отправить PM | Цитировать


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

Отправлено: 21:08, 06-12-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] перемещение N файлов из папки в папку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перемещение файлов только определенного формата в другую папку RoseBl Скриптовые языки администрирования Windows 10 27-04-2015 03:54
VBS/WSH/JS - Перемещение файлов и папок в разные папки... WalkManX Скриптовые языки администрирования Windows 0 07-08-2011 22:37
CMD/BAT - Перемещение в папку определенного количества файлов Arsenik77 Скриптовые языки администрирования Windows 1 18-07-2011 17:11
VBS/WSH/JS - Перемещение файлов в только, что созданную папку из контекстного меню. OSArev Скриптовые языки администрирования Windows 14 03-03-2011 22:08
CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку zavoruev Скриптовые языки администрирования Windows 22 28-05-2010 14:04




 
Переход