VBScript: помогите написать скрипт

Программирование на Active Server Pages и VBScript.
doomer
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 20.07.2007 (Пт) 11:52

VBScript: помогите написать скрипт

Сообщение doomer » 20.07.2007 (Пт) 11:57

Доброго времени суток.
Помогите пожалуйста со скриптом.
Необходимо копировать файлы по маске из сети на локальный компьютер в определенную папку. Суть в том, что если такой папки на локальном компьютере не существует, то должен создаваться лог файл содержащий дату/время, имя компьютера, имя пользователя: какталог [путь] не существует.
Если более детально, то:
Из папки "\\Comp1\user\shared\adm\docs" при помощи скрипта должно выполняться копирование файлов *.doc в папку "C:\docs".
Если папки docs на диске С:\ не существует, то создается лог файл с подробностями, который должен сохраняться в "\\Comp1\user\shared\files\".
Очень надеюсь на помощь. Заранее спасибо всем кто откликнется.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.07.2007 (Пт) 15:16

Код: Выделить всё
var sourcePath = "\\\\Comp1\\user\\shared\\adm\\docs\\";
var destPath = "c:\\docs\\";

var fso = new ActiveXObject("Scripting.FileSystemObject");
var net = new ActiveXObject("WScript.Network");

var log;

function initLog() {

    try {

        log = fso.CreateTextFile(destPath + "log.txt");

    } catch(e) {
    }

    return log;
}

function logMessage(m) {

    if (log) log.WriteLine(m);

}


function closeLog() {

    if (log) log.Close();

    net.RemoveNetworkDrive("L:");

}

function main() {

    initLog();

    //Положим, что диска L у нас в системе нет. Это, в приницпе можно было бы проверить, но мне лень :) По той же причине я не обрабатываю ошибки. По той же причине код написан на JS :) Хотя это отчасти носит и воспитательный характер - перевести его на VBS проще чем с нуля писать, и к тому же, тренировка для мозгов ;)


    net.MapNetworkDrive("L:", sourcePath);

    if (!fso.FolderExists(destPath)) {

        logMessage("Папка, куда мы хотели все копировать, не существует");

        closeLog();

        return;

    }

    var files = new Enumerator(fso.GetFolder("L:\\").Files);

    for (; files.moveNext(); !files.atEnd()) {

        try {

            files.item().Copy(files.item().Path, destPath + files.item().Name);

        } catch(e) {
            logMessage("Не могу скопировать файл " + destPath + files.item().Name);
        }

    }
    closeLog();

    WScript.Echo("Файлы скопированы");

}


doomer
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 20.07.2007 (Пт) 11:52

Сообщение doomer » 20.07.2007 (Пт) 15:39

Спасибо за помощь. Правда перевести в VBScript мне будет сложновато, пока что в этом ноль, а скрипт нужен на работе. Был бы премного благодарен именно за vbs. А пока посмотрю как этот работает.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 20.07.2007 (Пт) 19:14

RayShade
Ты издеваешься над человеком. В vbs нет исключений в принципе - как он должен это перевести? Бедняга будет искать способ, которого нет.

Видимо ты просто подсел на JS :wink:


Более того, твой код содержит ошибки:
1) У метода Copy только 1 обязательный аргумент - Destination. Не надо передавать ему ещё и Source... Ты спутал с FSO.CopyFile

2) Нафиг маппить сетевой путь как диск? Во-первых, у меня например, диск L:\ - это DVD-привод. А во-вторых, FSO прекрасно понимает сетевые пути.

3) Лог файл у тебя создаётся на локальной машине, а должен - в удалённой папке.

4) Твой код копирует всё подряд, а автору нужно только .doc

Итого: твой код в пролёте :)

___________


Перевод (исправленый) на ВБС:
Код: Выделить всё
Dim sourcePath
Dim destPath
Dim fso

sourcePath = "\\Comp1\user\shared\adm\docs\"
destPath = "c:\docs\"

Set fso = CreateObject("Scripting.FileSystemObject")

if Not fso.FolderExists(destPath) then
   Dim log
   Set log = fso.CreateTextFile(sourcePaths + "log.txt")
   log.WriteLine "Папка, куда мы хотели все копировать, не существует"
   log.close
else
    fso.CopyFile sourcePath+"*.doc", destPath
end if
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

doomer
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 20.07.2007 (Пт) 11:52

Сообщение doomer » 21.07.2007 (Сб) 2:55

Спасибо всем за помощь. Особенно Хакеру.
В идеале мне подошол вот такой вариант:
SourceFolder = "\\Comp1\user\shared\adm\docs\"
DestFolder = "C:\docs\"
LogFolder = "\\Comp1\user\shared\files\"
'====================================================================
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = CreateObject("WScript.Network")
Set LogFile = FSO.OpenTextFile(LogFolder & "\copy.log", 8, True)
If Not FSO.FolderExists(DestFolder) Then
LogFile.WriteLine Now & ", " & WshNetwork.ComputerName & ", " & WshNetwork.UserName & _
": каталог " & DestFolder & " не существует"
LogFile.Close
WScript.Quit
End If
For Each File In FSO.GetFolder(SourceFolder).Files
If Right(File.Name, 4) = ".doc" Then
FSO.CopyFile File.Path, DestFolder & File.Name, False
If Err.Number Then
LogFile.WriteLine Now & ", " & WshNetwork.ComputerName & ", " & WshNetwork.UserName & _
": " & Err.Description & " " & File.Name
Err.Clear
End If
End If
Next
LogFile.Close


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList