您好,我不太了解Windows脚本,但我有这种情况,我需要连接到我的电子邮件服务器,使用不同的协议进行测试,我需要不断地telnet这些,这是非常无用的事情,并且再一次所以我认为我应该编写一个Windows脚本,这样我就可以自动一次又一次地输入相同的东西。
这是我到目前为止所拥有的:
echo off
title Login to Mail using IMAP,POP3 and SMTP
echo Please enter the protocol required (POP3=1,IMAP=2,SMTP=3)&
set /P id= Enter Value :
echo You have selected option :%id%
IF %id%==1(
telnet <ip address> 110
user user@example.com
pass 123
)
IF %id%==2(
telnet <ip address> 143
a login user@example.com 123
)
IF %id%==3(
telnet <ip address> 25
helo r
auth login
<base64encodedusername>
<base64encodedpassword>
)
当我在cmd上键入命令时,命令本身按预期工作,但它不能在批处理文件中工作。我假设条件语句的语法是罪魁祸首,但我不确定。有人可以帮忙吗?
答案 0 :(得分:2)
条件语法存在问题。它必须是:IF %id%==1 (
,依此类推,在起始括号前面有一个空格。关于有条件执行命令的ss64是一个很好的指南。
但是在更正后,由于telnet
命令在Windows批处理中不可写,因此不工作。这意味着在第一个telnet
命令之后,您的批处理脚本将停留在该命令中,并且不会执行任何其他命令。看看这个SO question about using telnet in batch。有几个答案显示了如何完成任务的方法。
根据评论,这个answer适用于几个人。它使用start telnet.exe <IP>
和Visual Basic脚本(.vbs)来模拟击键。报价通知:
批处理文件(名为Script.bat):
:: Open a Telnet window start telnet.exe 192.168.1.1 :: Run the script cscript SendKeys.vbs
命令文件(名为SendKeys.vbs):
set OBJECT=WScript.CreateObject("WScript.Shell") WScript.sleep 50 OBJECT.SendKeys "mylogin{ENTER}" WScript.sleep 50 OBJECT.SendKeys "mypassword{ENTER}" WScript.sleep 50 OBJECT.SendKeys " cd /var/tmp{ENTER}" WScript.sleep 50 OBJECT.SendKeys " rm log_web_activity{ENTER}" WScript.sleep 50 OBJECT.SendKeys " ln -s /dev/null log_web_activity{ENTER}" WScript.sleep 50 OBJECT.SendKeys "exit{ENTER}" WScript.sleep 50 OBJECT.SendKeys " "