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

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

Ответить
Настройки темы
VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

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


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

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


Возникла необходимость копирования текстовых файлов из 4 сетевых папок в одну. Я так понимаю для одной папки будет что-то типо такого:
Код: Выделить весь код
Option Explicit
 
Dim objFSO
Dim strMask
 
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
 
With objFSO
    For Each strMask In Array("*.txt")
        .MoveFile .BuildPath("\\server1\share", strMask), "\\server2\Destination"
    Next
End With
 
Set objFSO = Nothing
 
WScript.Quit 0
А как будет для 4 папок? Плюс есть сложность - в именах файла есть символы [ и ]

Отправлено: 22:20, 02-05-2013

 

Ветеран


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

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


Цитата Wsador:
Если поставить в диспетчер задач »
Очевидно — планировщик задач.

Цитата Wsador:
то задача просто весит и не заканчивается. »
Скрипт вывел то же самое сообщение. Вы его не видите, поскольку для заданию, очевидно, не дано разрешения взаимодействовать с Рабочим столом текущего пользователя (такая настройка существует для заданий старого типа).

Вариантов несколько.

1. Закомментировать вывод сообщений апострофом:
Код: Выделить весь код
    'WScript.Echo "Folder [" & strPath & "] not contain any files"
.

2. Исполнять скрипт под консольным хостом «cscript.exe»:
Код: Выделить весь код
cscript.exe //nologo "Путь\Имя.vbs"
а не умолчальным GUI-вариантом — «wscript.exe». Вывод будет идти в консоль, а не в MessageBox'ы. При запуске из-под планировщика Вы не увидите равно и окно консоли.

3. Вообще подавить вывод сообщений (в том числе и сообщений об ошибках):
Код: Выделить весь код
cscript.exe //nologo //b "Путь\Имя.vbs"
или:
Код: Выделить весь код
wscript.exe //b "Путь\Имя.vbs"
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:33, 16-05-2013 | #11



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

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


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


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

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


Большое спасибо, Iska.
Воспользовался первым вариантом.
А можете подсказать каким образом в дальнейшем сделать перемещение из 4 папкок в 4 другие соответствующие папки. То есть например перемещать из папки \\server1\share1 в \\server2\share1, \\server1\share2 в \\server2\share2 и так для четырех папок. А также возможно ли каким-то образом вносить имена перемещаемых файлов в лог?

Последний раз редактировалось Wsador, 17-05-2013 в 11:39.


Отправлено: 09:54, 17-05-2013 | #12


Ветеран


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

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


Всё возможно. Но скажите, а каков глубинный смысл перемещения с одного ресурса на другой?

Отправлено: 11:16, 17-05-2013 | #13


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


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

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


А можете подсказать как это реализовать?
А смысл простой - есть 4 папки на внешнем фтп. Туда заливаются отчеты в текстовых файлах. На первом этапе(тестовом) их необходимо перемещать с этого фтп в одну папку на другой сервер, второй - этап из каждой папки в соответствующую папку на втором сервере. А потом из 4 папкок уже на втором сервере происходит автоматическая обработка содержания файлов приложением и дальнейшее их распеределение в соответствующие директории.

Отправлено: 11:34, 17-05-2013 | #14


Ветеран


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

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


Wsador, примерно так (не проверялось):
читать дальше »
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim arrShare

Dim strSourceFolder
Dim strDestFolder

Dim objFile
Dim objFolder


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

For Each arrShare In Array( _
		Array("\\server1\share1", "\\server2\share1"), _
		Array("\\server1\share2", "\\server2\share2"), _
		Array("\\server1\share3", "\\server2\share3"), _
		Array("\\server1\share4", "\\server2\share4") _
	)
	
	strSourceFolder = arrShare(0)
	strDestFolder   = arrShare(1)
	
	If objFSO.FolderExists(strSourceFolder) Then
		If objFSO.FolderExists(strDestFolder) Then
			With objFSO.GetFolder(strSourceFolder)
				If .Files.Count > 0 Then
					objFSO.MoveFile objFSO.BuildPath(strSourceFolder, "*.*"), strDestFolder & "\"
				End If
				
				If .SubFolders.Count > 0 Then
					objFSO.MoveFolder objFSO.BuildPath(strSourceFolder, "*.*"), strDestFolder & "\"
				End If
			End With
		Else
			WScript.Echo "Destination folder [" & strDestFolder & "] not found."
		End If
	Else
		WScript.Echo "Source folder [" & strSourceFolder & "] not found."
	End If
Next

Set objFSO = Nothing

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

Отправлено: 13:58, 17-05-2013 | #15


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


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

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


Iska
Спасибо, проверил -все работает. А возможно ли добавить логирование? Чтобы он заносил имя перемещаемых файлов в текстовый лог в сетевую папку на server2 - например в "\\server2\sharelogs"?

Отправлено: 13:01, 18-05-2013 | #16


Ветеран


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

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


Цитата Wsador:
А возможно ли добавить логирование? »
Приношу свои извинения, запамятовал.

Цитата Wsador:
Чтобы он заносил имя перемещаемых файлов в текстовый лог … »
Нет, нельзя, поскольку в данном варианте используется перемещение по маске — «*.*».

Если очень нужно, можно попробовать перебором:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim arrShare

Dim strSourceFolder
Dim strDestFolder

Dim objFile
Dim objFolder


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

For Each arrShare In Array( _
		Array("\\server1\share1", "\\server2\share1"), _
		Array("\\server1\share2", "\\server2\share2"), _
		Array("\\server1\share3", "\\server2\share3"), _
		Array("\\server1\share4", "\\server2\share4") _
	)
	
	strSourceFolder = arrShare(0)
	strDestFolder   = arrShare(1)
	
	If objFSO.FolderExists(strSourceFolder) Then
		If objFSO.FolderExists(strDestFolder) Then
			With objFSO.GetFolder(strSourceFolder)
				WScript.Echo "==========================================================="
				WScript.Echo "Source folder:      " & strSourceFolder
				WScript.Echo "Destination folder: " & strDestFolder
				WScript.Echo "-----------------------------------------------------------"
				
				For Each objFolder In .SubFolders
					WScript.Echo "[" & objFolder.Name & "]"
					objFolder.Move strDestFolder & "\"
				Next
				
				For Each objFile In .Files
					WScript.Echo objFile.Name
					objFile.Move strDestFolder & "\"
				Next
				
				WScript.Echo "==========================================================="
				WScript.Echo
			End With
		Else
			WScript.Echo "Destination folder [" & strDestFolder & "] not found."
		End If
	Else
		WScript.Echo "Source folder [" & strSourceFolder & "] not found."
	End If
Next

Set objFSO = Nothing

WScript.Quit 0

Для вывода лога в файл используйте перенаправление вывода:
Код: Выделить весь код
cscript.exe //nologo "Путь\Имя.vbs" >"\\server2\sharelogs\Out.log"
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:46, 18-05-2013 | #17


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


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

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


Изображения
Тип файла: jpg error.jpg
(17.5 Kb, 3 просмотров)

Iska
Все хорошо, только проблема с логом возникла. При запуске файла vbs с этим:
Код: Выделить весь код
cscript.exe //nologo "Путь\Имя.vbs" >"\\server2\sharelogs\Out.log"
Пишет ошибку - во вложении. Пробывал параметр //nologo и //b. На месте ошибки находятся начало скобок - /

Отправлено: 14:21, 20-05-2013 | #18


Ветеран


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

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


Цитата Wsador:
Пишет ошибку - во вложении. »
Нажмите «Ctrl-C» в окне сообщения об ошибке. Получите текст в буфер обмена.


Цитата Wsador:
error.jpg »
Вы его пытались запускать не через «cscript.exe»?

Цитата Wsador:
На месте ошибки находятся начало скобок - / »
Wsador, упакуйте в архив и выложите Ваш «R:\SCRIPTS\test.vbs».

Отправлено: 14:58, 20-05-2013 | #19


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


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

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


Вложения
Тип файла: zip test.zip
(234 байт, 4 просмотров)

Цитата Iska:
Вы его пытались запускать не через «cscript.exe»? »
Имется ввиду через wscript.exe?
Цитата Iska:
Wsador, упакуйте в архив и выложите Ваш «R:\SCRIPTS\test.vbs». »
Во вложении

Отправлено: 15:17, 20-05-2013 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки avfiga Скриптовые языки администрирования Windows 71 07-01-2023 18:50
Любой язык - [решено] Скрипт для копирования файлов/папок с заменой darkAge Скриптовые языки администрирования Windows 19 01-07-2013 18:06
CMD/BAT - Скрипт копирования файлов и папок в сети в дерикторию пользователей DNKolian Скриптовые языки администрирования Windows 2 18-02-2013 10:52
CMD/BAT - [решено] Скрипт для копирования стуктуры AD из одного OU в другой Outlaw_UA Скриптовые языки администрирования Windows 2 21-06-2012 17:59
CMD/BAT - Скрипт для копирования папок по сети _bb_ Скриптовые языки администрирования Windows 4 02-03-2011 15:07




 
Переход