如何使用批处理将带引号的代码添加到文件中?

时间:2017-06-03 18:54:15

标签: powershell email batch-file smtp

我正在尝试创建一个批处理文件,该文件将创建一个将通过PowerShell发送电子邮件的文件。它做了很多事情,但电子邮件只是它的一小部分。以下是我到目前为止的情况:

REM Creates batch file with contents of the powershell script
echo "I need to add the below powershell script" > email.bat
echo "into email.bat with all the quotes included">> email.bat
echo "like what I'm doing now with appending text">> email.bat
REM powershell script to send email.


$smtp = new-object Net.Mail.SmtpClient("smtp.gmail.com")

if( $Env:SmtpUseCredentials -eq "true" ) {
    $credentials = new-object Net.NetworkCredential("username","password")
    $smtp.Credentials = $credentials
}
$objMailMessage = New-Object System.Net.Mail.MailMessage
$objMailMessage.From = "myemail@gmail.com"
$objMailMessage.To.Add("whereImsendingto@gmail.com")
$objMailMessage.Subject = "Logs for today"
$objMailMessage.Body = "(the logs)"

$smtp.send($objMailMessage)

在批处理中,如果我添加的内容没有引号,我可以将文本附加到另一个文件,但是我需要添加包含引号的文本。

1 个答案:

答案 0 :(得分:0)

为什么不简单地回复没有引号并使用插入符号<>|&和双百分号来转义可能的字符^? 在(代码块)中,您还要转义括号^)

@Echo off
( Echo:$smtp = new-object Net.Mail.SmtpClient("smtp.gmail.com"^)
  Echo:
  Echo:if( $Env:SmtpUseCredentials -eq "true" ^) {
  Echo:    $credentials = new-object Net.NetworkCredential("username","password"^)
  Echo:    $smtp.Credentials = $credentials
  Echo:}
  Echo:$objMailMessage = New-Object System.Net.Mail.MailMessage
  Echo:$objMailMessage.From = "myemail@gmail.com"
  Echo:$objMailMessage.To.Add("whereImsendingto@gmail.com"^)
  Echo:$objMailMessage.Subject = "Logs for today"
  Echo:$objMailMessage.Body = "(the logs^)"
  Echo:
  Echo:$smtp.send($objMailMessage^)
) > "SomeFile.ps1"