2

我尝试使用带有 vb .net 的 gnokii 短信库(http://gnokii.org/)发送短信,我创建了一个单独的 bat 文件并从我的 vb.net 代码中调用该 bat 文件

这是我的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

这是我的bat文件

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

我的问题是我想将两个参数传递给消息正文和移动没有硬编码它们

消息正文由空格和多行组成,移动没有 cosistend 只有单行没有空格

我怎样才能在bat文件中实现

请帮忙

4

1 回答 1

2

首先,您应该测试是否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 换行变量 hack 的工作原理

要将其与评论中的参数一起使用,您需要在 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"
于 2013-12-17T08:37:45.573 回答