Показать полную графическую версию : Время исполнения скрипта
peretc001
31-01-2011, 10:04
Добрый день.
У меня скрипт раскидывает документы по папкам. Подскажите, как сделать чтоб при выполнении скрипта он показывал сколько процедур выполнено или сколько времени осталось до конца или чтоб он сам процесс копирования показывал, типа:
1.txt Ok
2.txt Ok
3.txt Ok
и т.д.
Ivan Bardeen
31-01-2011, 10:05
Будет проще подсказать, если вы покажете сам скрипт
peretc001
31-01-2011, 10:26
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
файлы 1.txt, 2.txt... у вас лежат в одной папке?
И как вы определяете, какой файл нужно копировать, а какой перемещать и в какую папку?
peretc001
31-01-2011, 10:50
да, все файлы лежат в одной папке.
Там очень сложная структура и определенные базы копируется в определенную папку, а потом некоторые переносятся в другую. Они очень много весят, есть базы по 1,5 Гиги. Поэтому мне нужно вывести процесс копирования и(или) перемещения.
Если тот код упростить, то он выглядит примерно так как я написал выше.
Ivan Bardeen
31-01-2011, 11:49
Тогда добавьте конструцию, которую я привожу для каждой операции над файлом (Выделено жирным).
Она будет вести лог для каждой операции над файлом и записывать его в 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
peretc001, «Scripting.FileSystemObject» не позволяет этого сделать (получать прогресс копирования/перемещения), только между операциями. Обходной вариант — копировать/перемещать, например, посредством Проводника (объект «Shell.Application»).
peretc001
31-01-2011, 12:19
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
Ivan Bardeen, у меня очегь много файлов, порядка 200, это мне после каждого нужно написать? »
Да, после каждого
И этот метод, я так понял, не показывает сам процесс копирования. »
Не показывает, только ведет лог.
peretc001
31-01-2011, 12:52
жаль, Ivan Bardeen, спасибо Вам за помощь
Ivan Bardeen
31-01-2011, 13:40
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
Если я просто поменяю Scripting.FileSystemObject на Shell.Application, будет работать? »
Нет, не будет.
Вы можете показать на примере скрипта что поменять? »
На примере примера скрипта (http://forum.oszone.net/post-1600999.html#post1600999) — не стану, ибо бессмысленно. Могу привести простой пример — вот:
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) (http://msdn.microsoft.com/en-us/library/bb773938(v=vs.85).aspx).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.