Vbscript MsgBox новая строка из пакетного аргумента

620
Riccardo La Marca

test.vbs:

wscript.quit MsgBox ("Hello"&vbNewLine&"World",0) 

работает.

prova.bat:

WScript //Nologo Message.vbs "Hello"&vbNewLine&"World" 0 

Message.vbs:

wscript.quit MsgBox (wscript.arguments(0),wscript.arguments(1)) 

не работает (почему?).

prova.bat (без перевода строки)

WScript //Nologo Message.vbs "Hello World" 0 

работает.

0
В результате передается командная строка: `WScript // Nologo Message.vbs" Hello "` из-за "Это можно увидеть в Process Explorer - http://imgur.com/a/7I7MA HelpingHand 6 лет назад 0
Большой! Вы смогли опубликовать. Но что именно ваш вопрос? LPChip 6 лет назад 1
Что ты хочешь случиться? Вы хотите заменить пробел в первом аргументе на новую строку? davidmneedham 6 лет назад 0
Любые амперсанды (&) должны быть экранированы с помощью каретки (^ &). Я также предлагаю использовать `Replace (wscript.arguments (0)," \ n ", vbNewLine)` `в вашем VBScript и изменить ваш файл .bat на что-то вроде` WScript // Nologo Message.vbs "Hello \ nWorld" 0` davidmneedham 6 лет назад 1

2 ответа на вопрос

1
Yorik

В сценарии VBS амперсанд &означает «сцепление» (соединение) и vbNewLineявляется определенной константой.

В пакетном файле амперсанд означает «выполнить это после завершения предыдущей команды» и vbNewLineне определен.

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

0
Riccardo La Marca
Dim Messaggio Messaggio = Replace(wscript.arguments(0),"\n",vbNewLine) wscript.quit MsgBox(Messaggio,wscript.arguments(1)) 

Идеально подходит для Universal Message Box с партией! ;-)
С возвращаемым значением в% errorlevel% в случае выбора.
Спасибо всем!

Похожие вопросы