Войти

Показать полную графическую версию : [решено] Кавычки внутри кавычек в VBS


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

BigBoo
15-01-2011, 00:31
Возможно вопрос банален, но никак не могу разобраться, как использовать кавычки внутри кавычек в VBS. То есть, например даже элементарная команда msgbox "Меню "Пуск"" выдаёт ошибку. Хочу напечатать именно Меню "Пуск" ,а не Меню Пуск. Так же и с другими командами. Пишу скрипт добавляющий строки в файл и в этих строчках есть кавычки. Был бы признателен за помощь.

Iska
15-01-2011, 03:20
Удваивать:
msgbox "Меню ""Пуск"""

BigBoo
15-01-2011, 12:05
Спасибо, тема закрыта.

BigBoo
16-01-2011, 20:23
В дополнение к теме, запуск приложения со строкой, содержащей путь.
Так не работает, ошибка - файл не найден:WSHShell.Run "C:\Program Files\Internet Explorer\Iexplore.exe www.ya.ru"
А вот так работает:WSHShell.Run """C:\Program Files\Internet Explorer\Iexplore.exe"" www.ya.ru"
Строка запуска заключается в ТРОЙНЫЕ кавычки!

SendMessage
17-01-2011, 12:57
Строка запуска заключается в ТРОЙНЫЕ кавычки! »
Просто путь C:\Program Files\Internet Explorer\Iexplore.exe содержит пробелы и его, естественно, надо заключать в кавычки, чтобы корректно отработала командная строка. А поскольку этот путь находится внутри строки, то и удваиваются кавычки вокруг этого пути.
Обычный путь - без пробелов, не обязательно заключать в кавычки. Например:
WSHShell.Run "C:\Windows\notepad.exe c:\test.txt"

BigBoo
17-01-2011, 14:46
А поскольку этот путь находится внутри строки, то и удваиваются кавычки » Но ведь такая конструкция не работает:
WSHShell.Run ""C:\Program Files\Internet Explorer\Iexplore.exe""
А работает только с ТРОЙНЫМИ кавычками: WSHShell.Run """C:\Program Files\Internet Explorer\Iexplore.exe"""
Честно не знаю, для чего нужно утраивать кавычки, но работает только так!
С путями без пробелов согласен, да это и само собой разумеется.

SendMessage
17-01-2011, 15:41
Но ведь такая конструкция не работает: »
Потому что, как написал Iska, кавычки, если они находятся внутри текста vbs, а он в нем всегда обрамляется кавычками, должны удваиваться.
В конструкции WSHShell.Run ""C:\Program Files\Internet Explorer\Iexplore.exe"" внешние кавычки относятся не к тексту, а к обрамлению текста. А сам текст такой - "C:\Program Files\Internet Explorer\Iexplore.exe". Но чтобы vbs правильно отображал кавычки в самом тексте - их делают двойными.
Поэтому они и вышли тройными - WSHShell.Run """C:\Program Files\Internet Explorer\Iexplore.exe""" - относящиеся к обрамлению текста я выделил красным, а кавычки текста синим.
Надеюсь, теперь понятно до конца?

Кстати, если в vbs нужно передать, например, текст состоящий из кавычек, вот такой: ""
то записать придется так:
""""""
:)

BigBoo
30-01-2011, 23:28
Помогите люди добрые, битый час бьюсь. Сколько только кавычек не ставил - результат нулевой! Как сделать, чтоб это заработало: Set Create = CreateObject("Scripting.FileSystemObject")
Set Folder = Create.GetFolder(WshShell.CurrentDirectory)
Str = Folder.Path &"\Папка\Прога.exe"
WSHShell.Run Str

OSArev
31-01-2011, 00:06
Помогите люди добрые, битый час бьюсь »
Если, только запустиь прогу, то:

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("Полный_путь\прога.exe")

Если нет, то мысль яснее

Iska
31-01-2011, 00:21
Str = Folder.Path &"\Папка\Прога.exe"
WSHShell.Run """" & Str & """"

BigBoo
31-01-2011, 00:23
OSArev, спасибо, через Exec работает. Получается, что в команде Run нельзя использовать переменные и дело здесь не в кавычках?

Iska, Увидил Ваше сообщение позже. Да, интересное решение, ни за что бы не додумался! :tease:

OSArev
31-01-2011, 02:53
Получается, что в команде Run нельзя использовать переменные и дело здесь не в кавычках? »
Run используется немного в других случаях.Вот долго не рылся первый попавшийся пример:

Dim objWshShell, strFileName, strFullFileName, Message, Title, OpenTextFile, MyVar
Message = "Введите название:"
Title = "Создание документа в формате RTF."
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

Do Until False
strFileName = InputBox(Message, Title)
If strFileName = "" Then
MyVar = MsgBox("Вы не ввели название или " & Chr(10) & "в название есть недопустимые символы!" & Chr(10) & "" & Chr(10) & "ВВЕДИТЕ НАЗВАНИЕ!!!", vbRetryCancel + vbExclamation, "Демонстрационное окно сообщения")
If MyVar = vbCancel Then WScript.Quit
Else
Exit Do
End If
Loop

strFullFileName = objFSO.BuildPath(objWshShell.SpecialFolders("C , D ,"), strFileName)
If objFSO.FileExists(strFullFileName & ".rtf") Then
WScript.Echo "Документ ''"& strFileName &".rtf'' - уже существует."
On Error resume Next
objWshShell.Run(strFullFileName & ".rtf")
WScript.Quit 0
Else
objFSO.CreateTextFile strFullFileName & ".rtf"
End If

On Error resume Next
objWshShell.Run(strFullFileName & ".rtf")


Set objWshShell = Nothing
Set objFSO = Nothing
WScript.Quit 0

Попробуй. Кстати изменив разрешение .rtf на любое другое, можно создавать практически все объекты.
Очень удобно в повседневной работе.У меня подобные скрипты прописаны в реестре.
Но я сам только с месяца полтора этим увлёкся, так, что извини если будут какие-нибудь накладки
Да, интересное решение, ни за что бы не додумался! »
Если это "неподкол", то огромное спасибо за спасибо...
Но, я в принципе ещё ничего толком не умею. Поэтому буду рад общению и любым советам.

BigBoo
21-02-2011, 02:13
Ну просто проблемы какие-то с этими кавычками, особенно при использовании команды Run. Подскажите, как сделать, чтобы заработало? WSHShell.Run "cacls """"D:\" & Fold"" /E /G ""User"":F"

Iska
21-02-2011, 02:35
BigBoo, у Вас тут непонятная мешанина.

Попробуйте так (если я правильно понял):
WSHShell.Run "cacls.exe ""D:\" & Fold & """ /E /G " & User & ":F"

BigBoo
21-02-2011, 03:17
Iska, спасибо, именно то что нужно. Только смутила логика подсветки кавычек, наверно должно быть как-то так: WSHShell.Run "cacls.exe ""D:\" & Fold & """ /E /G " & User & ":F"

Iska
21-02-2011, 05:12
Я подсветил те кавычки, которые превращаются в одну.

BigBoo
22-07-2011, 00:18
Опять вопрос о кавычках в команде Run. Вот такой скрипт:NameExe = "Nero.exe"
Target = WshShell.ExpandEnvironmentStrings("%ProgramFiles%") & "\Nero\Nero 10\Nero Burning ROM\"

WSHShell.Run """" & Target & NameExe
В посте (http://forum.oszone.net/post-1600785-10.html) выше предлагалось сделать так:WSHShell.Run """" & Target & NameExe & """" Оказалось, работает и без последних кавычек, но вот без первых нет: WSHShell.Run Target & NameExe & """"Никто не пояснит?

Iska
22-07-2011, 09:57
BigBoo, детали, почему так, а не иначе — как обычно, смотрите в MSDN: CreateProcess Function (Windows) (http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx).

C0D3X
18-02-2015, 15:31
Люди, помогите! Голову сломал - ничего не помогает.
Есть командная строка (из bat-файлика точно рботает!):

Net Stop "FileZilla Server"||(For /F "tokens=3" %%A In ('SC queryex "FileZilla Server"^|Find "PID"') Do (TaskKill /F /PID %%A>nul Ping -n 20 127.0.0.1>nul)) & Net start "FileZilla Server"

Необходимо запустить ее из vbs скрипта.
Пробовал так:

Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run "cmd /c @Echo Off & Set ServiceName=""FileZilla Server"" & Net Stop %ServiceName%||(For /F ""tokens=3"" %%A In ('SC queryex %ServiceName%^|Find ""PID""') Do (TaskKill /F /PID %%A>nul Ping -n 20 127.0.0.1>nul)) & Net start %ServiceName%",0,true

и так:

Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run "Net Stop ""FileZilla Server""||(For /F ""tokens=3"" %%A In ('SC queryex ""FileZilla Server""^|Find ""PID""') Do (TaskKill /F /PID %%A>nul Ping -n 10 127.0.0.1>nul)) & Net Start ""FileZilla Server""",0,true

Скрипт не выдает ошибок, но и ничего не выполняет %) думаю ошибка в ковычках, но уже и 3 и 4 ковычки пробовал результата 2: либо ошибка выполнения команды (из-за неправильных ковычек), либо отсутствие вообще всего :(

Помогите пожалуйста!)

Iska
18-02-2015, 17:15
думаю ошибка в ковычках, »
Думаю, Вам незачем тупо переносить код пакетного файла в скрипт. И зачем Вам именно в таком виде — разве сервис не останавливается?

Option Explicit

Dim strServiceName

Dim objSWbemObjectEx


strServiceName = "messenger"

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
With .Get("Win32_Service.Name='" & strServiceName & "'")
If .State = "Running" Then
If Not .StopService() = 0 Then
WScript.Echo "Can't stop service [" & strServiceName & "]."
End If
End If
End With
End With

WScript.Quit 0




© OSzone.net 2001-2012