Pregunta vbs - 800A0401 - Finalización del estado previsto


El murciélago tiene >>%vbs% echo oShellLink.IconLocation = "%1, 0"para producir

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

donde% 1 es una ruta citada

Sin embargo, a menos que elimine las comillas de la ruta como aquí:

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

Me sale el error titular. ¿Que sugieres? (Tenga en cuenta que% 1 siempre se proporciona con comillas)

Además, no estoy muy familiarizado con vbscript, ¿por qué no requiere citas una al lado de la otra?

...

Todavía no está claro por qué vbscript no puede interpretar esta tarea, pero encontró una solución: % ~ 1 - Expande% 1 y elimina las comillas que rodean ("").


0


origen




Respuestas:


En VBS, necesita escapar caracteres de comillas dobles con un segundo carácter de comillas dobles.

Entonces cambia

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

a

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

Que en el archivo VBS te dará

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

Que analiza a "C:\WINDOWS\NOTEPAD.exe", 0 antes de ser asignado a .IconLocation.

Editar (información adicional):

Básicamente, el error se produce si coloca una comilla no escapada en la cadena (no literal).

Esto se debe a que el analizador lo cree (el carácter de comillas) es el marcador final de la cadena, lo que deja la basura (los caracteres restantes) después de ella.

Entonces, dado que se supone que la cita de cierre es el marcador 'final de la declaración', pero encuentra caracteres después de la cita de cierre, hay un error porque se esperaba que fuera el "Fin del estado de cuenta".

La ruta funciona con y sin las comillas escapadas que lo envuelven debido a la forma en que .IconLocation analiza de forma inteligente la lista de argumentos que está introduciendo como una sola Cadena.


0



Mi comprensión de cómo funciona esto (corríjala si es necesario): ve la asignación, por lo que elimina las comillas dobles en rhs. Entonces cualquier doble al lado del otro se convierte a una comilla doble literal. Pero si no son literales de alguna manera causan un error. - user93200
Tu explicación de cómo se analiza es correcta. Trataré de aclarar por qué ese error está apareciendo un poco en una edición de mi pregunta (debido a la habitación). - Ƭᴇcʜιᴇ007


Tu problema es esta linea

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

Usted tiene un "" que es el carácter de escape de cita. Esto básicamente le permite tener una cadena que contiene una cita sin tener un error de analizador. Al igual que:

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

víveres

este es un literal de cadena que contiene un "carácter de cita"


1



Entonces, ¿cómo elimino las comillas de% 1 si no son necesarias? - user93200