Время исполнения скрипта
Добрый день.
У меня скрипт раскидывает документы по папкам. Подскажите, как сделать чтоб при выполнении скрипта он показывал сколько процедур выполнено или сколько времени осталось до конца или чтоб он сам процесс копирования показывал, типа:
1.txt Ok
2.txt Ok
3.txt Ok
и т.д.
|
Ivan Bardeen |
31-01-2011 10:05 1600950 |
Будет проще подсказать, если вы покажете сам скрипт
|
Код:
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... у вас лежат в одной папке?
И как вы определяете, какой файл нужно копировать, а какой перемещать и в какую папку?
|
да, все файлы лежат в одной папке.
Там очень сложная структура и определенные базы копируется в определенную папку, а потом некоторые переносятся в другую. Они очень много весят, есть базы по 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
|
peretc001, «Scripting.FileSystemObject» не позволяет этого сделать (получать прогресс копирования/перемещения), только между операциями. Обходной вариант — копировать/перемещать, например, посредством Проводника (объект «Shell.Application»).
|
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
И этот метод, я так понял, не показывает сам процесс копирования. »
|
Не показывает, только ведет лог.
|
жаль, 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
|
Цитата:
Цитата 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.
© OSzone.net 2001-