1 (изменено: Dr.Hofmann, 2013-01-22 17:08:44)

Тема: VBS: Метод выхода/завершение скрипта

Всем привет!
Хочу дописать скрит vbs - котрый будет  выполнять следующие действия:
По ходу просмотра будет вопрос:

LogFile=".\cat1\.*."
If objFSO.FileExist(LogFile) Then

Set objFSO = CreateObject("Scripting.FileSystemObject") - Инициализирую переменную путем создания объекта файловой системы    

If objFSO.FileExist(LogFile) Then

        objFSO.CopyFile ".\cat1\*.*" , ".\arch\" - вызываю метод для копирование в архив тех файлов которые попадают в этот каталог
        
    
        objFSO.MoveFile ".\cat1\*.*" , ".\cat2\" - перемещаю в нужный каталог 

 Else

                                Exit(); close. copy-moving.vbs    -  1.  [b]Хотелось бы сдесь реализовать выход, завершение?[/b]
                  ЗДЕСЬ
{

2. Так же реализовать условие которое которое проверяло бы - логически выполненную строку например:

 IF (objFSO.MoveFile ".\cat1\*.*" , ".\cat2\") = true then

WScript.CreateObject("Wscript.Shell").Run "netsend.bat", 1, vbTrue

Else 

WScript.CreateObject("Wscript.Shell").Run "netsend2.bat", 1, vbTrue


}

[b]Что можете посоветовать?[/b]

'сообщаем о результатах копирования
If Err.Number Then
WScript.CreateObject("Wscript.Shell").Run "netsend.bat", 1, vbTrue

else
WScript.CreateObject("Wscript.Shell").Run "netsend2.bat", 1, vbTrue

Err.Clear
End if

2 (изменено: Rom5, 2013-01-22 19:35:12)

Re: VBS: Метод выхода/завершение скрипта

Объект WshShell - Метод 3.4. Run

Там есть пример запуска (например, Вашего батника) с ожиданием завершения работы и выводом возвращаемого кода.

а также - 4.2.1. ExitCode


Устанавливать на выходе из скрипта свой код возврата - Объект WScript - 3.2. Quit

WBR. Roman

3

Re: VBS: Метод выхода/завершение скрипта

LogFile = ".\cat1\*.*"
Const OverwriteExisting = True   
Set objFSO = CreateObject("Scripting.FileSystemObject")     
     
If objFSO.FileExists(LogFile) Then 
objFSO.CopyFile ".\cat1\*.*" , ".\arch\" , OverwriteExisting                                 
objFSO.MoveFile ".\cat1\*.*" , ".\cat2\" 
Else                           
WScript.Quit 1
End If

Выполняется но ничего не делает, вопрос к знатокам где ошибка?

4

Re: VBS: Метод выхода/завершение скрипта

FSO-методы  .Copy и .Move по моему не поддерживают символы подстановки (*, ?), т.е. это только для явно указанного файла.

Для работы с маской можете вызывать внешний cmd.exe с командой копирования (или вызов батник, принимающий параметры - что и куда копировать):

WScript.CreateObject("WScript.Shell").Run "%COMSPEC% /c Copy <source> <dest>"
WBR. Roman

5 (изменено: Dr.Hofmann, 2013-01-23 15:22:55)

Re: VBS: Метод выхода/завершение скрипта

Rom5 пишет:

Объект WshShell - Метод 3.4. Run

Там есть пример запуска (например, Вашего батника) с ожиданием завершения работы и выводом возвращаемого кода.

а также - 4.2.1. ExitCode


Устанавливать на выходе из скрипта свой код возврата - Объект WScript - 3.2. Quit

Возникает вопрос а зачем его запускать если в каталоге нет файлов?

С помощъю чего можно реализовать проверку наличия каких либо файлов в каталоге? - на первом этапе а потом уже производить копирование или перемещение.

6

Re: VBS: Метод выхода/завершение скрипта

FSO-методы  .Copy и .Move по моему не поддерживают символы подстановки (*, ?), т.е. это только для явно указанного файла.

Поддерживают.

В отличие от «.FileExists()». Посему здесь:

LogFile = ".\cat1\*.*"

If objFSO.FileExists(LogFile) Then

— ошибка.

С помощъю чего можно реализовать проверку наличия каких либо файлов в каталоге?

VBS проверка существования файла по маске

7 (изменено: Rom5, 2013-01-23 17:00:03)

Re: VBS: Метод выхода/завершение скрипта

Dr.Hofmann пишет:

Возникает вопрос а зачем его запускать если в каталоге нет файлов?

С помощъю чего можно реализовать проверку наличия каких либо файлов в каталоге? - на первом этапе а потом уже производить копирование или перемещение.

Если известно имя конкретного файла, то там же на "Главной", где про объекты WScript, есть и про объект "FileSystemObject" и там есть про метод "FileExists".

WBR. Roman

8

Re: VBS: Метод выхода/завершение скрипта

Если известно имя конкретного файла, то там же на "Главной", где про объекты WScript, есть и про объект "FileSystemObject" и там есть про метод "FileExists".

Я же написал каких-либо файлов -  имя его неизвестно.

VBS проверка существования файла по маске

полезными оказались две строчки

использовать иной инструмент: WMI-подписку на соответствующее системное событие.
Ищите на форуме темы по ключам CIM_DirectoryContainsFile и __InstanceCreationEvent.

9

Re: VBS: Метод выхода/завершение скрипта

Dr.Hofmann, для проверки наличия файлов достаточно Folder.Files.Count > 0 безо всяких подписок.

10

Re: VBS: Метод выхода/завершение скрипта

Dr.Hofmann, для проверки наличия файлов достаточно Folder.Files.Count > 0 безо всяких подписок.

пасиб - получилось

Вот как сделал:

run_copy.vbs

LogFile = ".\cat1" 
Set objFSO = CreateObject("Scripting.FileSystemObject")   
Set Folder = objFSO.GetFolder(LogFile)
If Folder.files.count > 0 Then
WScript.CreateObject("Wscript.Shell").Run "copy_move.vbs", 1, vbTrue
WScript.CreateObject("Wscript.Shell").Run "netsend.bat", 1, vbTrue
Else
WScript.Quit 
End If

copy_move.vbs

Const OverwriteExisting = True  
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.CopyFile ".\cat1\*.*" , ".\arch\" , OverwriteExisting                                 
objFSO.MoveFile ".\cat1\*.*" , ".\cat2\" 
WScript.Quit

netsend.bat

cd %systemroot%\system32
chcp 1251
net send 192.168.10.108 Получено сообщение

11

Re: VBS: Метод выхода/завершение скрипта

Всё можно объединить в один скрипт.

12

Re: VBS: Метод выхода/завершение скрипта

Всё можно объединить в один скрипт.

Комрад,  напиши название метода раз сказал))

13

Re: VBS: Метод выхода/завершение скрипта

Если не планируется еще из другого скрипта вызывать "copy_move.vbs", то просто включите его текст (кроме дублирующегося объявления "Set objFSO") в "стартовый" скрипт вместо вызова

WScript.CreateObject"Wscript.Shell").Run "copy_move.vbs
WBR. Roman

14

Re: VBS: Метод выхода/завершение скрипта

Запуск "net send" тоже можете попробовать оформить вызовом в строке с cmd.exe ("%comspec%) вместо вызова своего батника. Вот для примера строки запуска команды с паузой:

WScript.CreateObject("Wscript.Shell").Run _
"%comspec% /K chcp 1251 && net send 192.168.10.108 Получено сообщение  &&Pause&&Exit"
WBR. Roman

15 (изменено: Rom5, 2013-01-24 19:21:29)

Re: VBS: Метод выхода/завершение скрипта

LogFile = ".\cat1" 
Set objFSO = CreateObject("Scripting.FileSystemObject")   
Set Folder = objFSO.GetFolder(LogFile)
If Folder.files.count > 0 Then
    ''''WScript.CreateObject("Wscript.Shell").Run "copy_move.vbs", 1, vbTrue
    Const OverwriteExisting = True  
    objFSO.CopyFile ".\cat1\*.*" , ".\arch\" , OverwriteExisting                                 
    objFSO.MoveFile ".\cat1\*.*" , ".\cat2\" 
    '--- net send
    WScript.CreateObject("Wscript.Shell").Run "net.exe send 192.168.10.108 Cat1_Msg_RECEIVED!", 1
End If
WScript.Quit 
WBR. Roman

16

Re: VBS: Метод выхода/завершение скрипта

Непонятно <WaitOnReturn> - True / vbTrue метода Run вы убрали его для тех строк которые принадлежат copy_move.vbs - Нужно же понимать что произойдет если по какой либо причине эти строки кода не отработают.

17

Re: VBS: Метод выхода/завершение скрипта

Dr.Hofmann пишет:

Непонятно <WaitOnReturn> - True / vbTrue метода Run вы убрали его для тех строк которые принадлежат copy_move.vbs - Нужно же понимать что произойдет если по какой либо причине эти строки кода не отработают.

Операции копирования запускаются уже не отдельным вызовом внешнего скрипта, а внутри основного, т.е. пока они не отработают - далее скрипт не продолжится.
Если не отработают операции копирования из-за ошибок - то получите ошибку и скрипт прервется.


А в вызове через Run отправки сообщения особого смысла в ожидании нет, т.к. после этого вызова Вашему скрипту остается просто завершиттся -  ведь никаих более операций ниже той строки нет.

WBR. Roman