Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Время исполнения скрипта (http://forum.oszone.net/showthread.php?t=198139)

peretc001 31-01-2011 10:04 1600948

Время исполнения скрипта
 
Добрый день.

У меня скрипт раскидывает документы по папкам. Подскажите, как сделать чтоб при выполнении скрипта он показывал сколько процедур выполнено или сколько времени осталось до конца или чтоб он сам процесс копирования показывал, типа:

1.txt Ok
2.txt Ok
3.txt Ok

и т.д.

Ivan Bardeen 31-01-2011 10:05 1600950

Будет проще подсказать, если вы покажете сам скрипт

peretc001 31-01-2011 10:26 1600974

Код:

On Error Resume Next

Set FSO  = WScript.CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("WScript.Shell")

If Not FSO.FolderExists("1") Then                                                                                       
        FSO.CreateFolder("1")       
        FSO.CreateFolder("1\2")
End If

Const OverwriteExisting = True
Set FSO = CreateObject("Scripting.FileSystemObject")

FSO.MoveFile "1.txt" , "1\"                                                                        ' перемещаем '
FSO.CopyFile "2.txt" , "1",                                                                        OverwriteExisting
FSO.MoveFile "2.txt" , "1\2\"                                                                        ' перемещаем '
FSO.MoveFile "3.txt" , "1\"                                                                        ' перемещаем '
FSO.MoveFile "4.txt" , "1\"                                                                        ' перемещаем '


WScript.Echo "Распределение завершено!"

Set Shell = Nothing
Set FSO  = Nothing

WScript.Quit


Ivan Bardeen 31-01-2011 10:40 1600990

файлы 1.txt, 2.txt... у вас лежат в одной папке?
И как вы определяете, какой файл нужно копировать, а какой перемещать и в какую папку?

peretc001 31-01-2011 10:50 1600999

да, все файлы лежат в одной папке.

Там очень сложная структура и определенные базы копируется в определенную папку, а потом некоторые переносятся в другую. Они очень много весят, есть базы по 1,5 Гиги. Поэтому мне нужно вывести процесс копирования и(или) перемещения.

Если тот код упростить, то он выглядит примерно так как я написал выше.

Ivan Bardeen 31-01-2011 11:49 1601053

Тогда добавьте конструцию, которую я привожу для каждой операции над файлом (Выделено жирным).
Она будет вести лог для каждой операции над файлом и записывать его в c:\temp\logtest.txt
Код:

On Error Resume Next
Const ForAppend = 8

Set FSO  = WScript.CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("WScript.Shell")

If Not FSO.FolderExists("1") Then                                                                                       
        FSO.CreateFolder("1")       
        FSO.CreateFolder("1\2")
End If

Const OverwriteExisting = True
Set FOut = fso.OpenTextFile("c:\temp\logtest.txt",ForAppend,True)

FSO.MoveFile "1.txt" , "1\"               
If Err.Number <> 0 Then
text = "Ошибка:" & " " & Err.Number & " " & "Описание:" & " " & Err.Description & " " & "При операции над файлом: 1.txt"
FOut.WriteLine Text
Else
text = "Операция над файлом 1.txt прошла успешно"
FOut.WriteLine Text
End If

FSO.CopyFile "2.txt" , "1",OverwriteExisting
FSO.MoveFile "2.txt" , "1\2\"                                                                       
FSO.MoveFile "3.txt" , "1\"                                                                       
FSO.MoveFile "4.txt" , "1\"                                                                       


WScript.Echo "Распределение завершено"

Set Shell = Nothing
Set FSO  = Nothing

WScript.Quit


Iska 31-01-2011 12:00 1601058

peretc001, «Scripting.FileSystemObject» не позволяет этого сделать (получать прогресс копирования/перемещения), только между операциями. Обходной вариант — копировать/перемещать, например, посредством Проводника (объект «Shell.Application»).

peretc001 31-01-2011 12:19 1601073

Ivan Bardeen, у меня очегь много файлов, порядка 200, это мне после каждого нужно написать?

Код:

If Err.Number <> 0 Then
text = "Ошибка:" & " " & Err.Number & " " & "Описание:" & " " & Err.Description & " " & "При операции над файлом: 1.txt"
FOut.WriteLine Text
Else
text = "Операция над файлом 1.txt прошла успешно"
FOut.WriteLine Text
End If

И этот метод, я так понял, не показывает сам процесс копирования.



Iska, а как использовать Shell.Application? Если я просто поменяю Scripting.FileSystemObject на Shell.Application, будет работать? Вы можете показать на примере скрипта что поменять?

Ivan Bardeen 31-01-2011 12:42 1601090

Цитата:

Цитата peretc001
Ivan Bardeen, у меня очегь много файлов, порядка 200, это мне после каждого нужно написать? »

Да, после каждого
Цитата:

Цитата peretc001
И этот метод, я так понял, не показывает сам процесс копирования. »

Не показывает, только ведет лог.

peretc001 31-01-2011 12:52 1601098

жаль, Ivan Bardeen, спасибо Вам за помощь

Ivan Bardeen 31-01-2011 13:40 1601127

peretc001,
А вот так процесс копирования вас устроит? Пример для перемещения и копирования с помощью проводника в папку (targetfolder)
Код:

On Error Resume Next
Const ForAppend = 8

Set FSO  = WScript.CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("WScript.Shell")
Set objShell = CreateObject("Shell.Application")

If Not FSO.FolderExists("1") Then                                                                                       
        FSO.CreateFolder("1")       
        FSO.CreateFolder("1\2")
End If

TargetFolder = "1"
Set objFolder = objShell.NameSpace(TargetFolder)
objFolder.MoveHere "3.txt", &H0&
objFolder.CopyHere "4.txt",&H0&

TargetFolder = "1\2"
Set objFolder = objShell.NameSpace(TargetFolder)
objFolder.MoveHere "1.txt", &H0&
objFolder.CopyHere "2.txt", &H0&

WScript.Echo "Распределение завершено"

WScript.Quit


Iska 31-01-2011 13:48 1601135

Цитата:

Цитата peretc001
Если я просто поменяю Scripting.FileSystemObject на Shell.Application, будет работать? »

Нет, не будет.
Цитата:

Цитата peretc001
Вы можете показать на примере скрипта что поменять? »

На примере примера скрипта — не стану, ибо бессмысленно. Могу привести простой пример — вот:
Код:

Option Explicit

Dim objShell
Dim objFolder

Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("E:\Песочница\0031")

If Not objFolder Is Nothing Then
        objFolder.CopyHere "C:\WINDOWS\System32\*.dll"
       
        Set objFolder = Nothing
End If

Set objShell = Nothing

WScript.Quit 0

Описание объекта «Shell.Application», его объектов, свойств и методов можно узнать здесь: Shell Objects for Scripting and Microsoft Visual Basic (Windows).


Время: 07:11.

Время: 07:11.
© OSzone.net 2001-