Vbs копирование файла по сети
Ну как-то вот так наверное :
<job>
<runtime>
<description>
XCopy on VBScript
</description>
<named
name = "SRC"
helpstring = "Source directory (/S also possible)"
type = "string"
required = "true"
/>
<named
name = "DST"
helpstring = "Destination directory (/D also possible)"
type = "string"
required = "true"
/>
<named
name = "Good"
helpstring = "file for cood copied files (/G)(default - strout)"
type = "string"
required = "false"
/>
<named
name = "Bad"
helpstring = "file for BAD copied files (/B) (default - strerr)"
type = "string"
required = "false"
/>
<example>
Example: vxcopy.wsf /S:"c:\debug" /D:"c:\release"
</example>
</runtime>
<script language="VBScript">
On Error Resume Next
Const ForReading = 1, ForWriting = 2
Set oFso = CreateObject("Scripting.FileSystemObject")
if WScript.Arguments.Named.Item("SRC") <> "" then
SDir = WScript.Arguments.Named.Item("SRC")
Elseif WScript.Arguments.Named.Item("S") <> "" then
SDir = WScript.Arguments.Named.Item("S")
Else
Wscript.Echo "Source directory must be set."
Wscript.Echo "----------------------------"
WScript.Arguments.ShowUsage
WScript.Quit (1)
end if
if WScript.Arguments.Named.Item("DST") <> "" then
DDir = WScript.Arguments.Named.Item("DST")
Elseif WScript.Arguments.Named.Item("D") <> "" then
DDir = WScript.Arguments.Named.Item("D")
Else
Wscript.Echo "Destination directory must be set."
Wscript.Echo "----------------------------"
WScript.Arguments.ShowUsage
WScript.Quit (2)
end if
if WScript.Arguments.Named.Item("Good") <> "" then
FileName = WScript.Arguments.Named.Item("Good")
elseif WScript.Arguments.Named.Item("G") <> "" then
FileName = WScript.Arguments.Named.Item("G")
Else
FileName = ""
end if
if FileName <> "" Then
Set GoodFile = oFso.OpenTextFile(FileName, ForWriting, True)
if Err Then
Wscript.Echo "Error open Good file = " & FileName
Wscript.Echo "----------------------------"
WScript.Quit (3)
end if
Else
Set GoodFile = Wscript.StdOut
end if
if WScript.Arguments.Named.Item("Bad") <> "" then
FileName = WScript.Arguments.Named.Item("Bad")
elseif WScript.Arguments.Named.Item("B") <> "" then
FileName = WScript.Arguments.Named.Item("B")
Else
FileName = ""
end if
if FileName <> "" Then
Set BadFile = oFso.OpenTextFile(FileName, ForWriting, True)
if Err Then
Wscript.Echo "Error open Badfile = " & FileName
Wscript.Echo "----------------------------"
WScript.Quit (3)
end if
Else
Set BadFile = Wscript.StdErr
end if
if NOT oFso.FolderExists(SDir) Then
Wscript.Echo "Error open source directory" & sDir
Wscript.Echo "----------------------------"
WScript.Quit (3)
Else
CopyDir SDir, DDir
end if
Sub CopyDir ( ByVal Src, ByVal Dst )
If NOT oFSO.FolderExists(Dst) Then
Set Folder = oFSO.CreateFolder(Dst)
if Err Then
Err.Clear
BadFile.Write "Create Folder - " & Dst & vbcrlf
'. Hmmmm Need write other files to Bad log?
Exit Sub
Else
GoodFile.Write "Create folder - " & Dst & vbcrlf
end if
end if
for each Folder in oFSO.GetFolder(Src).Subfolders
CopyDir Src & "\" & Folder.Name , Dst & "\" & Folder.Name
next
for each File in oFSO.GetFolder(Src).Files
oFSO.CopyFile File, Dst & "\" & File.Name
if Err Then
Err.Clear
BadFile.Write "File - " & File.Path & "\" & File.Name & vbcrlf
Else
GoodFile.Write File.Path & "\" & File.Name & vbcrlf
end if
next
Там в одном месте в подпрограмме стоит выход, если создание каталога неудачно. Соответственно всё что глубже этого каталога в логи не пойдет. Если её убрать, то в логах будут ошибки от создания поддеревьев.
Доброго времени суток, пытаюсь сделать скрипит копирования файлов по разрешениям на сервер я VBS изучать начал неделю назад и никак не могу понять, в чем я ошибся. Ошибка в 23 строчке подскажите, пожалуйста, что неправильно.
Добавлено через 24 минутыНемного переделал функцию наверное так правильнее
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Копирование файлов с определёнными расширениями
Копирование файлов с определенным расширением. Поле ввода расширения (cpp, pas). Dim.
Резервное копирование с исключением файлов с определёнными расширениями
Добрый день! Подскажите как реализовать резервное копирование с применением маски на исключение.
Резервное копирование файлов с определенными расширениями из разных каталогов
резервное копирования файлов с определенными расширениями из разных каталогов с возможностью.
Резервное копирование файлов с определенными расширениями из разных каталогов
Резервное копирование файлов с определенными расширениями из разных каталогов с возможностью.
В первом случае - мтоед .CopyFile принимает только строковой тип, а не объект.
Во втором (строка № 10), inFolder = "\\server\" - скорее всего недоступна сетевая шара, либо метод не поддерживает копирование по сети.
Зайдут спецы по Networking-у, подскажут.
Я могу только рассказать, как замапить через Batch:
И затем использовать устройство X: как целевой каталог.
Возможно, нет разрешений на запись в \\server\ - вы уверены, что нужно писать именно в корень, а не в какую-то из расшаренных папок на нем?
Добавлено через 2 минуты
Кстати, текст и код ошибки тоже неплохо было бы привести. Чаще всего он однозначно говорит о причине.
Dragokas, Спасибо за батники, попробую, но интересно узнать, как на VBS получится. Касательно копирования по сети вполне может быть, но пахать отказывается и при локальных путях. Ошибка при запуске следующего содержания: .
есть ли хороший способ получить доступ к сетевым ресурсам из сценария VBS с альтернативными учетными данными (а не учетными данными, с которыми работает сценарий VBS)?
намерение состоит в том, чтобы выполнить две задачи:
- программно перейдите к удаленной структуре файлов общего доступа, чтобы подтвердить, что существует несколько удаленных файлов, и скопируйте один файл поверх другого (оба удаленных)
- копировать файлы с локального диска (доступ с локальным именем пользователя / разрешения) на удаленный диск (доступ с альтернативными учетными данными)
насколько я могу сказать FSO (Scripting.FileSystemObject) отсутствует, потому что он всегда работает с учетными данными приложения, использующего его - который будет локальным пользователем компьютера.(?)
единственный жизнеспособный подход, который я нашел во время поиска в googling для подготовки пакетного файла (или расширенного вызова "cmd.exe"), который использует "net use" для предоставления учетных данных удаленного общего ресурса, а затем копирует файлы с robocopy или тому подобное, из той же командной оболочки "сеанс". Это будет работать нормально для копирования / развертывания файлов с локального диска на удаленный общий ресурс, но это было бы очень сложно и хрупко сделать любой просмотр файловой системы (как вы сделали бы с FSO) таким образом.
другая возможность, которую я рассмотрел, включает в себя два сеанса сценариев - вы вызываете скрипт (предоставляя альтернативные учетные данные в командной строке), и он запускает УМК.exe-сеанс, который сначала выполняет" сетевое использование "для сопоставления удаленного общего ресурса с временным локальным диском, затем запускается в режиме" фактически делать вещи " и использует FSO, а затем, когда это сделано (назад в cmd.exe shell) снова отключает временный диск с помощью "net use". Это неуклюжий (несколько окон, временный диск. и я даже не уверен, что это сработает.
кто-нибудь знает, в любом случае, или знаете реальную альтернативу? (придерживаясь VBScript / WScript на машине windows 2000-нет В PowerShell!)
хорошо, я работал под неправильным представлением-что FSO не "заберет" сетевые учетные данные, установленные с помощью" NET USE " (или Wscript.Сеть "MapNetworkDrive").
оказывается, что это так, и следующий пример кода работает очень хорошо (без необходимости настройки временных сетевых дисков):
По сути, сначала мы рассмотрим, как копировать файлы на диск в Windows ручным методом с помощью комбинаций клавиш и мышки, потом рассмотрим метод объекта FileSystemObject – CopyFile, который позволяет программным путём копировать файлы на диск или в указанную директорию, а потом начнём программировать.
И так, как копировать вручную файлы на диск? Да всё предельно просто, в зависимости от того, сколько нам нужно копировать файлов, мы можем выделить мышью один или несколько документов, а потом перетянуть их в другую папку или диск, предварительно удерживая клавишу "Ctrl", отпускаем левую кнопку мыши и всё, файлы скопированы. Второй способ – использование комбинации клавиш, снова выбираем нужные документы, нажимаем комбинацию "Ctrl + C", потом открываем нужную папку или диск и нажимаем комбинацию "Ctrl + V". Стоит помнить тот момент, что если мы попытаемся копировать файлы и вставить в одно и то же место ( скопировали на диске "С" и туда же хотим снова вставить ), то ошибки не произойдёт, система автоматически переименует вставляемые файлы, чтобы не возник конфликт имён.
Как копировать файлы на диск
Хорошо, с одной теорией мы закончили, теперь можно приступить к другой И так, за копирование файлов на диск отвечает метод CopyFile класса FileSystemObject. Стоит учитывать, что данный метод производит одиночное копирование, то есть, нельзя начать копирование, нажать на паузу и потом снова продолжить. Его синтаксис следующий:
CopyFile (source, destination [,overwrite]) – как видим методу передаются три параметра, при этом, последний не является обязательным.
- source – данный параметр принимает строковое значение и указывает полный путь к файлу, который нужно скопировать, можно использовать подстановочные знаки: "?" – любой один символ и "*" – любое количество символов.
- destination – опять таки, полный путь, куда будет скопирован файл, при чём, можно указать новое имя и расширение.
- overwrite – если параметр установлен в логическое значение true – будет происходить замена, false – не производить замены (по умолчанию).
Хорошо, с теорией разобрались, теперь можно приступить к программированию. Для начала рассмотрим программный код на языке vbscript:
Давайте рассмотрим всё по пунктам. Сам сценарий производит создание папки "Новая папка_vbs" в текущем каталоге, для этого мы используем метод CreateFolder, после происходит копирование текущего файла (сценария) в созданную папку (метод CopyFolder класса FileSystemObject).
dim fso, new_folder – тут мы объявили переменные, fso – хранит ссылку на объект FileSystemObject, new_folder – хранит путь к новому каталогу.
set WshShell = CreateObject("Scripting.FileSystemObject ") – тут мы создаем ссылку на экземпляр объекта Wscript.Shell, тут мы используем стандартную функцию языка vbscript для создания ссылки на класс – CreateObject, также, как видим, фигурирует ключевое слово set. Объект нужен для использования метода CopyFile.
set new_folder=fso.CreateFolder("Новая папка_vbs") – тут происходит создание новой папки "Новая папка_vbs" с помощью метода CreateFolder, более детально, роботу данного метода я описал в статье "FileSystemObject метод CreateFolder". Как копировать файл на диск.
fso.CopyFile WScript.ScriptFullName, new_folder & "\тест_vbs.txt" , true – в данной строке мы производим процесс копирования текущего сценария в новый каталог, но уже под именем тест_vbs.txt. WScript.ScriptFullName содержит строку, которая определяет полный путь к текущему сценарию.
Стоит обратить внимание, что я не включал проверку ошибок.
Хорошо, теперь давайте рассмотрим аналогичный пример, но уже на языке jscript:
Тут я сделал некоторые изменения: изменил имя новой папки, имя конечного файла, в результате, произойдёт создание в текущей папке каталога "Новая папка_js", и копирование в нее текущего сценария, в итоге мы получим текстовый документ "тест_js.txt".
И так, в этой статье мы рассмотрели, как копировать файлы на диск с помощью метода CopyFile класса FileSystemObject. Для реализации поставленной задачи мы программировали на языке vbscript и jscript.
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: