Летучая мышь имеет >>%vbs% echo oShellLink.IconLocation = "%1, 0" для производства

oShellLink.IconLocation = "" C:\WINDOWS\NOTEPAD.exe ", 0" `

где% 1 - путь в кавычках

Однако, если я не удаляю кавычки из пути, как здесь:

oShellLink.IconLocation = "C:\WINDOWS\NOTEPAD.exe, 0"

Я получаю титульную ошибку. Что ты предлагаешь? (Обратите внимание, что% 1 всегда снабжается кавычками)

Кроме того, я не очень знаком с VBScript, почему он не требует кавычек рядом друг с другом?

...

До сих пор не ясно, почему vbscript не может интерпретировать это назначение, но нашел исправление:% ~ 1 - Расширяет% 1 и удаляет любые окружающие кавычки ("").

2 ответа2

1

Ваша проблема в этой линии

oShellLink.IconLocation = ""C:\WINDOWS\NOTEPAD.exe", 0"

У вас есть "", который является экранирующим символом кавычки. Это в основном позволяет получить строку, содержащую кавычку, без ошибки синтаксического анализатора. Вот так:

" this is a string literal that contains a "" quote character"

магазины

это строковый литерал, который содержит символ "кавычки"

0

В VBS вам нужно экранировать символы двойной кавычки со вторым символом двойной кавычки.

Так что меняй

>>%vbs% echo oShellLink.IconLocation = "%1, 0"

в

>>%vbs% echo oShellLink.IconLocation = ""%1", 0"

Который в файле VBS даст вам

oShellLink.IconLocation = """C:\WINDOWS\NOTEPAD.exe"", 0"

Который анализируется как "C:\WINDOWS\NOTEPAD.exe", 0 перед тем, как быть назначенным.IconLocation.

Изменить (дополнительная информация):

По сути, ошибка выдается, если вы поместите не экранированную кавычку в (не литеральную) строку.

Это связано с тем, что синтаксический анализатор считает, что он (символ кавычки) является конечным маркером строки, после которого после него остается мусор (оставшиеся символы).

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

Путь работает с и без экранированных кавычек, оборачивая его из-за пути.IconLocation интеллектуально анализирует список аргументов, которые вы передаете, как одну строку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .