嗨,我不太了解Windows脚本,但我有这种情况下,我需要连接到我的电子邮件服务器与不同的协议进行testing,我需要经常telnet那些是无用的事情一遍又一遍,所以我想我应该写一个Windows脚本,这样我就可以自动地input一遍又一遍的相同的东西。
这是我迄今为止:
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上键入命令时,命令本身按预期工作,但在batch file中不起作用。 我假设我的条件语句的语法是罪魁祸首,但我不知道。 谁能帮忙?
您的条件语法存在问题。 它必须是: IF %id%==1 (
在起始圆括号前面有一个空格,在ss64上是关于condionally执行命令的一个很好的指南。
而且在校正之后,由于telnet
命令在Windows批处理中不可写, 所以不起作用。 这意味着在第一个telnet
命令之后,你的批处理脚本将会停留在那里,而没有其他命令会被执行。 看看这个关于批量使用telnet的问题 。 有几个答案显示如何完成你的任务。
根据评论,这个答案正在为几个人工作。 它使用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 " "