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

Аватара пользователя
Wsador

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

Сообщение Wsador »

Возникла необходимость копирования текстовых файлов из 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 папок? Плюс есть сложность - в именах файла есть символы [ и ]
Аватара пользователя
Iska

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Iska »

Поменять ненужный здесь цикл по маскам на цикл по ресурсам:



Код:

Код: Выделить всё

Option Explicit
Dim objFSO
Dim strPath
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
With objFSO
	For Each strPath In Array("\\server1\share1", "\\server1\share2", "\\server2\share3", "\\server2\share4")
		.MoveFile .BuildPath(strPath, "*.*"), "\\server2\Destination"
	Next
End With
Set objFSO = Nothing
WScript.Quit 0


Цитата Wsador:



Плюс есть сложность - в именах файла есть символы [ и ]
VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну




Никакой сложности, это не PowerShell.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Iska »

Странно, ошибка выходит:

Изображение

то бишь там, где строчка Move..
Аватара пользователя
Iska

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Iska »

Код:

Код: Выделить всё

		.MoveFile .BuildPath(strPath, "*.*"), "\\server2\Destination\"

Боле подробный вариант:



Код:

Код: Выделить всё

Option Explicit
Dim objFSO
Dim arrSources
Dim strDestination
Dim strPath
arrSources     = Array("\\server1\share1", "\\server1\share2", "\\server2\share3", "\\server2\share4")
strDestination = "\\server2\Destination"
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
With objFSO
	For Each strPath In arrSources
		If .FolderExists(strPath) Then
			If .GetFolder(strPath).Files.Count > 0 Then
				.MoveFile .BuildPath(strPath, "*.*"), strDestination & "\"
			Else
				WScript.Echo "Folder [" & strPath & "] not contain any files"
			End If
		Else
			WScript.Echo "Folder [" & strPath & "] not found"
		End If
	Next
End With
Set objFSO = Nothing
WScript.Quit 0
Аватара пользователя
Wsador

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Wsador »

Странно, ошибка выходит:

Изображение

то бишь там, где строчка Move..
Аватара пользователя
Wsador

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Wsador »

Цитата lipro122:



А если файлы (папки) уже существуют , в "\\server2\Destination" ...

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




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


Цитата:



If destination is an existing file, an error occurs.



Два встречных вопроса:


Цитата Wsador:



Возникла необходимость копирования текстовых файлов из 4 сетевых папок в одну. Я так понимаю для одной папки будет что-то типо такого:



Код:

Код: Выделить всё

…
    .MoveFile .BuildPath("\\server1\share", strMask), "\\server2\Destination"
…

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




Я проглядел ранее этот момент. Так копирование или перемещение?



О каких папках — «если файлы (папки)» — идёт речь? Изначально говорилось только о текстовых файлах.




Цитата lipro122:



файлы удовлетворяющие атрибутам по дате создания ( например не старше 30 дней) ?.
VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну




Менять логику скрипта, убирая работу по маскам (вот, кстати, тоже — не «*.*», а «*.txt») и перебирая файлы по одному, проверяя дату их создания и расширение. На мой взгляд, тут проще использовать PowerShell, с его расширенными возможностями по фильтрации.
Аватара пользователя
lipro122

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение lipro122 »

Цитата Iska:



Я проглядел ранее этот момент. Так копирование или перемещение?

О каких папках — «если файлы (папки)» — идёт речь? Изначально говорилось только о текстовых файлах.
VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну




Необходимо перемещение. Речь идет о необходимости перемещать текстовые файлы. На powershell возникают проблемы из-за именования файлов - в именах содержатся символы [, ]. Использование LiteralPath что-то не помогает, вот и подумал о vbs. Про папки - ситуация такая: в четыре определённые папки на одном сервере происходит выгрузка результата в текстовом файле, из этих 4 папок необходимо все переместить в одну папку на другом сервере.
Аватара пользователя
lipro122

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение lipro122 »

С этим:


Цитата Iska:




Цитата lipro122:



А если файлы (папки) уже существуют , в "\\server2\Destination" ...

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




Нет, не будут. Возникнет ошибка времени исполнения в момент попытки перемещения файла.
VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну




что решили делать?
Аватара пользователя
Wsador

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Wsador »

Iska

Пока ничего. А какие могут быть варианты? В данном случае с одной стороны это может быть и хорошо, но желательно конечно чтобы имена файлов при перемещении переносились в лог на сетевом диске, чтобы было видно какие файлы перемещались. На powershell так и сделано, но там проблема с наименованием файлов с символами - он их просто не перемещает, если в файле нету символа - то все ок. Правда все файлы с символами.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну

Сообщение Iska »

Цитата Iska:



Боле подробный вариант:

Код:

Option Explicit

Dim objFSO

Dim arrSources

Dim strDestination

Dim strPath

arrSources = Array("\\server1\share1", "\\server1\share2", "\\server2\share3", "\\server2\share4")

strDestination = "\\server2\Destination"

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

With objFSO

For Each strPath In arrSources

If .FolderExists(strPath) Then

If .GetFolder(strPath).Files.Count > 0 Then

.MoveFile .BuildPath(strPath, "*.*"), strDestination & "\"

Else

WScript.Echo "Folder [" & strPath & "] not contain any files"

End If

Else

WScript.Echo "Folder [" & strPath & "] not found"

End If

Next

End With

Set objFSO = Nothing

WScript.Quit 0
VBS/WSH/JS - Скрипт для копирования из 4 сетевых папок в одну




Возник вопрос - при выполнении в ручную скрипта, он перемещает файл и выводит окно, если нажать ОК, то переходит к следующей папке и тд.Или просто выводит сообщение, что файлов в такой-то папке файлов нет и переходит к другой. Если поставить в диспетчер задач - то задача просто весит и не заканчивается. Как сделать так,чтобы не выводилось окно о перемещении файла?Этот скрипт должен выполнятся каждые 10 минут
Ответить

Вернуться в «Скриптовые языки администрирования Windows»