PDA

Показать полную графическую версию : Вопрос по синтаксису VBScript


Страниц : [1] 2

dsa
03-06-2007, 19:58
Имеется рабочий скрипт вида

dim objExecute, break
const command = "cmd /c net view"

Set wshshell = Wscript.CreateObject("Wscript.Shell")

set ObjExecute = wshshell.Exec (command) 'выполняем команду в оболочке cmd

IsBreak = false 'определяем прерывание

Do While IsBreak = False
if (not ObjExecute.StdOut.AtEndOfStream) then
text = text & objExecute.StdOut.ReadAll ' считываем поток выполнения команды
End if
If IsBreak = true then
Exit do
End if
If ObjExecute.Status = 1 then 'Проверяем статус завершения процесса
IsBreak = true
Else
Wscript.Sleep 100
End if
Loop

Wscript.echo text

Вопрос:

Каким образом можно модифицировать константу command для фильтра - выборки (в теории "cmd /c net view | find /i "pc-sale"")
Т.к. при выполнении сценария wsh ругается с кодом ошибки на незавершенную конструкцию в этой строке, - т.е. ему не нравятся дополнительные кавычки в параметрах фильтра
<off> :) </off>
Куда же их можно удачно внедрить? ;)

amel27
04-06-2007, 03:05
dsa
const command = "cmd /c net view|find /i ""pc-sale"""

voler
09-06-2007, 13:10
Еще один трабл с кодировкой, когда Wscript.echo text отрабатывается все символы, что в пишуться на русском отображаются как иероглефы. Может кто водскажет как задать вывод Wscript.echo text в кодировке опеределенной?

amel27
09-06-2007, 14:33
voler
вероятно у тебя сам текст VBS-скрипта в DOS-кодировке

voler
09-06-2007, 15:04
Нет ты не понял. Текст скрипта у меня в ansi кодировке. А вот та информация что в консоли выводится, она то и в иероглифах.

amel27
09-06-2007, 15:20
voler
у тебя случайно TEXT формируется не внешней CMD-командой?.. она может выводить результат в OEM-кодировке

voler
13-06-2007, 08:55
Подскажи как это проверить?

amel27
13-06-2007, 10:04
сохрани TEXT в файле, вьюер покажет (к примеру в FAR'е).... для других вариантов нужно знать как формируется TEXT

voler
13-06-2007, 10:17
Латиница "Text" - номально, а вот кирилица "Текст" - иероглефы.

amel27
13-06-2007, 12:28
"NET VIEW" формирует результат в OEM-кодировке, нужно перекодировать в ANSI.
Как вариант: http://forum.oszone.net/post-427527-124.html
NET VEW|dos2winЗ.Ы. Кстати, встречал варианты и на VBS, нужно только оформить массив (см. исходник) и вперед. ;)

Blast
11-02-2008, 13:00
Господа, а подскажите мне тоже по синтаксису.
Есть скрипт, выполняющий в принципе элементарные операции - последовательный запуск файла(ов) с различными параметрами, выглядит это примерно так: Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("X:\Folder with file\filename.exe /parameter1 /parameter2 ""Некий текст, который обязан быть в кавычках""")

Все бы неплохо, но вот parameter2 не выполняется так как filename.exe не понимает зачем там столько кавычек, а иначе vbs не понимает зачим их там мало...
Вот тот текст в кавычках является частью параметра2 и не может быть ни в одинарных кавычках ни в каких-то других.
Можно побороть?

Petya V4sechkin
11-02-2008, 13:58
Вот тот текст в кавычках является частью параметра2 и не может быть ни в одинарных кавычках ни в каких-то других.
Не понял.
В твоем примере три параметра:
/parameter1
/parameter2
"Некий текст, который обязан быть в кавычках"

Blast
11-02-2008, 14:06
можно и так сказать, но их нельзя разделить.. как бы это объяснить толком...
нет возможности сначала выполнить параметр1 потом параметр 2, а потом параметр3 разными строками например, все они в одной строке и иначе не работают

Petya V4sechkin
11-02-2008, 16:16
Blast, sorry, по-прежнему не понимаю.
Я вот использую (для тестирования) твой пример, и он нормально работает. С тремя параметрами. В одной строке.

Хочешь, чтобы было два параметра?
/parameter1
/parameter2 "Некий текст, который обязан быть в кавычках"
Но это невозможно. Потому что после /parameter2 идет пробел. То есть, возможно, но для этого в самом filename.exe должна быть особая обработка параметров.

Blast
11-02-2008, 16:23
Ну смотри, все это наверное нужно было сразу на живом примере, тем более, что ты поймешь о чем речь :)
WshShell.Run ("bcdedit.exe /create {ntldr} /d ""Microsoft Windows XP""")
вот оно и не работает, именно добавление описания для загрузчика ntldr и не работает из-за кавычек...

выкрутиться можно, не проблема в принципе, то есть взять да и поставить там вместо 4-5 команд вызов cmd с ними, но мне хотелось минимизировать кол-во файлов и в принципе понять возможна ли нужная мне конструкция в vbs

Попутно еще хотел бы уточнить как добавить в тот же vbs команду удаления определенной папки с форсированием и без подтверждения удаления да еще и чтоб удаление было выполнено после выполнения всех команд в скрипте, то есть на завершаеющем этапе.

Petya V4sechkin
11-02-2008, 22:01
Blast, с точки зрения синтаксиса все правильно. В этом легко убедиться, заменив WshShell.Run на MsgBox.
А если так попробовать:
WshShell.Run ("%ComSpec% /C bcdedit.exe /create {ntldr} /d ""Microsoft Windows XP""")
взять да и поставить там вместо 4-5 команд вызов cmd с ними
Если команд несколько, почему бы и нет.

Попутно еще хотел бы уточнить как добавить в тот же vbs команду удаления определенной папки с форсированием и без подтверждения удаления
DeleteFolder (http://msdn2.microsoft.com/en-us/library/ca0at0xh(VS.85).aspx)

Blast
11-02-2008, 22:08
с точки зрения синтаксиса все правильно »я понимаю, сам же скрипт рабочий, а тут специфика bcdedit
А если так попробовать »
одно и то же.. bcdedit как таковой не воспринимает наличие двух пар кавычек и поэтому не отрабатывает в полной мере... Если команд несколько, почему бы и нет »
я просто хотел убедиться, что средствами vbs это не сделать, ну нет так нет.. а жаль DeleteFolder »
ага, оно, спасибо, что поискал за меня :)

Petya V4sechkin
11-02-2008, 22:14
bcdedit как таковой не воспринимает наличие двух пар кавычек
При выполнении скрипта они становятся одиночными. Говорю же - замени WshShell.Run на MsgBox.
Хотя это и неважно...

Blast
11-02-2008, 22:35
При выполнении скрипта они становятся одиночными »
ага, не понял сразу тебя, так будет очень хорошо :)
Если ты не против, то я позже еще попристаю, появилась идея еще кое-что усовершенствовать.. аппетит растет во время еды :)

Blast
12-02-2008, 03:21
А есть ли возможность в vbs на начальном этапе выводить окно с чекбоксами для нужных параметров и выполнять их в соответствии с тем какие чекбоксы были отмечены? Я может плохо искал, но не смог найти как это сделать.




© OSzone.net 2001-2012