Передача параметров нескольких строк и одной строки в bat-файл MS DOS

Я пытаюсь отправить смс используя библиотеку смс gnokii ( http://gnokii.org/) с vb .net, я создал отдельный файл bat и вызываю этот файл bat из моего кода vb.net

это мой код VB

 Dim process As New System.Diagnostics.Process
    Dim startInfo As New ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory & "sms.bat")
    process.StartInfo = startInfo
    process.StartInfo.Arguments = txtBody.Text'text typed in text box

это мой файл летучей мыши

@echo off
echo Begin Transaction
echo "message body" |  c:\sms\gnokii.exe   --sendsms 0771234567 'this is mobile no
pause

Моя проблема заключается в том, что я хочу передать два параметра в тело сообщения и на мобильное устройство без жесткого кода их

Тело сообщения состояло из пробелов и мультилиней, а мобильный - без единой строки без пробелов

Как я могу достичь в файле Bat

пожалуйста помоги

1 ответ

Решение

Сначала вы должны проверить, если gnokii.exe принимает многострочные тексты через канал
Просто создайте многострочный текстовый файл и попробуйте

type mySMS.txt | c:\sms\gnokii.exe   --sendsms 0771234567

Если это работает, то также должно быть возможно отправить его из командного файла и добавить перевод строки в текст.

@echo off
setlocal EnableDelayedExpansion
set LF=^


rem ** The two empty lines are required **
echo Begin Transaction
echo Line1!LF!Line2 |  c:\sms\gnokii.exe   --sendsms 0771234567 'this is mobile no

EnableDelayedExpansion следует использовать, когда используются символы перевода строки.
Существуют также решения использовать его с процентным расширением, но это гораздо сложнее.
Объясните, как работает хак с переменным dos-batch newline

Чтобы использовать это с параметрами, как в вашем комментарии, вам нужно отформатировать сообщение в VB.

Поэтому, когда вы хотите отправить текст, как

Привет
это текст
с тремя строчками

Вам необходимо отправить в партию

process.StartInfo.Arguments = "Hello!LF!this is a text!LF!with three lines"

И ваша партия должна выглядеть

setlocal EnableDelayedExpansion
set LF=^


set "text=%~1"
echo !text! | c:\sms\gnokii.exe --sendsms %2

Второе решение, когда это не работает.

Создайте временный файл и используйте перенаправление

setlocal EnableDelayedExpansion
set LF=^


set "text=%~1"
echo !text! > "%TMP%\sms.txt"
c:\sms\gnokii.exe --sendsms %2 < "%TMP%\sms.txt"
del "%TMP%\sms.txt"
Другие вопросы по тегам