将多行和单行参数传递给MS DOS bat文件

时间:2013-12-17 07:43:24

标签: vb.net batch-file cmd dos gnokii

我尝试使用gnokii sms库(http://gnokii.org/)和vb .net发送短信,我创建了一个单独的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文件中实现

请帮助

1 个答案:

答案 0 :(得分: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 还存在使用百分比扩展的解决方案,但这要复杂得多 Explain how dos-batch newline variable hack works

要在评论中使用此参数,您需要在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"