Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Вопрос по синтаксису VBScript (http://forum.oszone.net/showthread.php?t=84911)

dsa 03-06-2007 19:58 594612

Вопрос по синтаксису VBScript
 
Имеется рабочий скрипт вида

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 594706

dsa
Код:

const command = "cmd /c net view|find /i ""pc-sale"""

voler 09-06-2007 13:10 597321

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

amel27 09-06-2007 14:33 597364

voler
вероятно у тебя сам текст VBS-скрипта в DOS-кодировке

voler 09-06-2007 15:04 597375

Нет ты не понял. Текст скрипта у меня в ansi кодировке. А вот та информация что в консоли выводится, она то и в иероглифах.


amel27 09-06-2007 15:20 597382

voler
у тебя случайно TEXT формируется не внешней CMD-командой?.. она может выводить результат в OEM-кодировке

voler 13-06-2007 08:55 598644

Подскажи как это проверить?

amel27 13-06-2007 10:04 598683

сохрани TEXT в файле, вьюер покажет (к примеру в FAR'е).... для других вариантов нужно знать как формируется TEXT

voler 13-06-2007 10:17 598690

Латиница "Text" - номально, а вот кирилица "Текст" - иероглефы.

amel27 13-06-2007 12:28 598756

"NET VIEW" формирует результат в OEM-кодировке, нужно перекодировать в ANSI.
Как вариант: http://forum.oszone.net/post-427527-124.html
Код:

NET VEW|dos2win
З.Ы. Кстати, встречал варианты и на VBS, нужно только оформить массив (см. исходник) и вперед. ;)

Blast 11-02-2008 13:00 737808

Господа, а подскажите мне тоже по синтаксису.
Есть скрипт, выполняющий в принципе элементарные операции - последовательный запуск файла(ов) с различными параметрами, выглядит это примерно так:
Код:

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 737849

Цитата:

Цитата Blast
Вот тот текст в кавычках является частью параметра2 и не может быть ни в одинарных кавычках ни в каких-то других.

Не понял.
В твоем примере три параметра:
  1. /parameter1
  2. /parameter2
  3. "Некий текст, который обязан быть в кавычках"

Blast 11-02-2008 14:06 737853

можно и так сказать, но их нельзя разделить.. как бы это объяснить толком...
нет возможности сначала выполнить параметр1 потом параметр 2, а потом параметр3 разными строками например, все они в одной строке и иначе не работают

Petya V4sechkin 11-02-2008 16:16 737956

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

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

Blast 11-02-2008 16:23 737963

Ну смотри, все это наверное нужно было сразу на живом примере, тем более, что ты поймешь о чем речь :)
Код:

WshShell.Run ("bcdedit.exe /create {ntldr} /d ""Microsoft Windows XP""")
вот оно и не работает, именно добавление описания для загрузчика ntldr и не работает из-за кавычек...

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

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

Petya V4sechkin 11-02-2008 22:01 738148

Blast, с точки зрения синтаксиса все правильно. В этом легко убедиться, заменив WshShell.Run на MsgBox.
А если так попробовать:
Код:

WshShell.Run ("%ComSpec% /C bcdedit.exe /create {ntldr} /d ""Microsoft Windows XP""")
Цитата:

Цитата Blast
взять да и поставить там вместо 4-5 команд вызов cmd с ними

Если команд несколько, почему бы и нет.

Цитата:

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

DeleteFolder

Blast 11-02-2008 22:08 738152

Цитата:

Цитата Petya V4sechkin
с точки зрения синтаксиса все правильно »

я понимаю, сам же скрипт рабочий, а тут специфика bcdedit
Цитата:

Цитата Petya V4sechkin
А если так попробовать »

одно и то же.. bcdedit как таковой не воспринимает наличие двух пар кавычек и поэтому не отрабатывает в полной мере...
Цитата:

Цитата Petya V4sechkin
Если команд несколько, почему бы и нет »

я просто хотел убедиться, что средствами vbs это не сделать, ну нет так нет.. а жаль
Цитата:

Цитата Petya V4sechkin
DeleteFolder »

ага, оно, спасибо, что поискал за меня :)

Petya V4sechkin 11-02-2008 22:14 738155

Цитата:

Цитата Blast
bcdedit как таковой не воспринимает наличие двух пар кавычек

При выполнении скрипта они становятся одиночными. Говорю же - замени WshShell.Run на MsgBox.
Хотя это и неважно...

Blast 11-02-2008 22:35 738163

Цитата:

Цитата Petya V4sechkin
При выполнении скрипта они становятся одиночными »

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

Blast 12-02-2008 03:21 738272

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

Sham 12-02-2008 04:07 738279

Цитата:

Цитата Blast
не воспринимает наличие двух пар кавычек »

это кавычки в VB так экранируются, но у меня сомнения по поводу
Цитата:

Цитата Blast
bcdedit как таковой не воспринимает »

какие кавычки ему скрипт шлеть (можеть кодировка не та или еще чего...) без стакана тут не разобраться...
Blast, попробуй чтоли WshShell.Run с параметрами указать... а если кавычки совсем убрать? Не прокатит? Пробелы замени на _

Цитата:

Цитата Blast
А есть ли возможность в vbs на начальном этапе выводить окно с чекбоксами »

не путай VBS и VBA

Blast 12-02-2008 09:43 738349

Sham, а вполне прокатило с %ComSpec% /C :)
Цитата:

Цитата Sham
не путай VBS и VBA »

бес попутал :)
я не знаю в принципе, то есть в vbs скрипте нельзя?

Sham 12-02-2008 11:24 738422

Цитата:

Цитата Blast
то есть в vbs скрипте нельзя? »

afaik только InputBox и MsgBox... но с их помощью можно добиться нужного и без галок... напр. с помощью InputBox с текстом "для ..... введите букву\цифру ..... и тд"

Blast 12-02-2008 21:10 738860

Sham, спасиб
в принципе пока достаточно того как работает сейчас


Время: 10:00.

Время: 10:00.
© OSzone.net 2001-