Цитата megaloman:
Iska, Скобки там не существенны, »
|
megaloman, согласен.
Собственно, всю разницу можно увидеть на таком примере:
Скрытый текст
Код:

Option Explicit
Dim strValue
strValue = "AAAA"
SomeSub strValue
WScript.Echo "strValue = " & strValue
WScript.Echo
strValue = "AAAA"
SomeSub (strValue)
WScript.Echo "strValue = " & strValue
WScript.Quit 0
Sub SomeSub(anyValue)
WScript.Echo "anyValue before = " & anyValue
anyValue = anyValue & "+" & anyValue
WScript.Echo "anyValue after = " & anyValue
End Sub
Цитата:
Код: 
anyValue before = AAAA
anyValue after = AAAA+AAAA
strValue = AAAA+AAAA
anyValue before = AAAA
anyValue after = AAAA+AAAA
strValue = AAAA
|
По умолчанию, в VBScript параметры передаются по ссылке (в стек кладётся не значение переменной-параметра, а ссылка на саму переменную-параметр), посему, если изменить значение аргумента внутри процедуры/функции — это отразится на значении самого переданного параметра (поскольку на самом деле работа идёт как раз с ним).
Когда аргумент заключается в скобки — тем самым сначала вычисляется
выражение в скобках, а затем уже это вычисленное значение передаётся в процедуру/функцию.
В таких языках, как, например, AutoIt — там практически любой вызов оформляется скобками, а вот в VBScript — скобки используются только тогда, когда вызов осуществляется в правой части выражения. В противном случае скобки интерпретируются не как скобки при вызове процедуры/функции, а как необходимость вычисления выражения.
Когда у нас имеется несколько параметров — ничего страшного, попытка такого вызова:
Код:

SomeSub (strValue1, strValue2)
приведёт к тому, что возникнет ошибка компиляции «Недопустимо использование скобок при вызове процедуры Sub». А вот если аргумент будет один, как в случае выше:
Код:

SomeSub (strValue)
— компилятор просто решит, что «ничего страшного, (strValue) — это просто выражение, которое надо вычислить и затем передать его значение в процедуру/функцию».
Цитата megaloman:
Хуже, что скрипт работает корректно только при запуске посредством Wscript, с Cscript писАть в архив не хочет. »
|
И хочет, и пишет. Просто не успевает, поскольку метод .CopyHere() работает асинхронно, т.е., объект Folder класса Shell.Application не ждёт окончания работы метода, а сразу возвращает управление скрипту, который, соответственно, продолжает свою работу. Боюсь, что на достаточно крупных файлах «обломится» и wscript.exe (сейчас не проверялось, я уже не помню конкретики).