windowsbat脚本编写(运⾏命令,ftp上传和Telnet)
背景
部署Jenkins持续集成,需要⽤命令把操作串起来,做到⾃动化部署。我们的服务器是windows2008,所以就想到了写个bat脚本,到时候直接运⾏就好了。
第⼀次写,啥都不知道,还是上⽹搜寻资料吧。这⾥做个记录~~~~~
批处理bat⽂件最常⽤的⼏个命令:
echo表⽰显⽰此命令后的字符
echo on 表⽰在此语句后所有运⾏的命令都显⽰命令⾏本⾝
echo off 表⽰在此语句后所有运⾏的命令都不显⽰命令⾏本⾝
@与echo off相像,但它是加在每个命令⾏的最前⾯,表⽰运⾏时不显⽰这⼀⾏的命令⾏(只能影响当前⾏)。
call 调⽤另⼀个批处理⽂件(如果不⽤call⽽直接调⽤别的批处理⽂件,那么执⾏完那个批处理⽂件后将
⽆法返回当前⽂件并执⾏当前⽂件的后续命令)。
pause 运⾏此句会暂停批处理的执⾏并在屏幕上显⽰Press any key 的提⽰,等待⽤户按任意键后继续
rem 表⽰此命令后的字符为注释,不执⾏。
copy a:*.* d:\back 复制命令
>、>>输出重定向命令:将⼀条命令或某个程序输出结果的重定向到特定⽂件中, > 与 >>的区别在于,>会清除调原有⽂件中的内容后写⼊指定⽂件,⽽>>只会追加内容到指定⽂件中,⽽不会改动其中的内容
例⼦
⾸先我们看⼀个例⼦,进⼊springboot项⽬⽬录,运⾏maven命令打包:
@echo off
D:
cd D:\Toona\Toona-springboot\toona-demo
rem ⽣成后端jar包,移动到统⼀⽬录
set JAVA_HOME=D:\java\ibm_jdk1.8.0
call mvn clean package spring-boot:repackage -st.skip=true
copy D:\Toona\Toona-springboot\toona-demo\target\toona-demo.jar D:\Toona-file\Toona-package
rem ⽣成后端war包,移动到统⼀⽬录
set JAVA_HOME=D:\java\ibm_jdk1.8.0
call mvn clean package spring-boot:repackage -st.skip=true -l
copy D:\Toona\Toona-springboot\toona-demo\target\toona-demo.war D:\Toona-file\Toona-package
rem ⽣成zip包,移动到统⼀⽬录
call npm install
call npm run dist
cd dist
jar cvfM toona-demo-web.zip ./
copy ......
1.对于@echo off 如果不加上的话,在运⾏bat的时候就会把运⾏的命令打印出来,效果就和⾃⼰在cmd中敲命令⼀样
2.设置环境变量JAVA_HOME可以⽤set 变量名=value
<是注释,不会运⾏
4.在BAT⽂件⾥⾯执⾏Maven的mvn命令后,mvn之后的命令不会被执⾏,这是由于mvn本⾝也是BAT⽂件,并且其结束时执⾏了exit命令。要让mvn命令不使当前脚本⾃动退出,只需要在mvn之前加上call命令,类似的npm等,都是这样,即使添加了pause也会⾃⼰跳了
5.关于windows命令对⽂件进⾏压缩,可以见⽂章wwwblogs/charles8866/articles/10472645.html
bat中ftp上传
下⾯,我们需要对⽣成的jar包,和war包等上传到linux服务器上,这个时候就需要⽤到windows中的ftp:
@echo off
set
echo open 192.168.133.34 >"%ftpfilename%"
echo username >>"%ftpfilename%"
echo password >>"%ftpfilename%"
echo Prompt >>"%ftpfilename%"
echo bin >>"%ftpfilename%"
echo lcd h:\js >>"%ftpfilename%"
echo mput flower.zip flower2.zip flower3.zip>>"%ftpfilename%"
echo bye >>"%ftpfilename%"
ftp -s:"%ftpfilename%"
del "%ftpfilename%"
1.在windows系统中因为FTP是⼀个程序,如果在bat脚本中直接调⽤FTP的命令,在执⾏时总会弹出命令⾏窗⼝,循环在>FTP光标这,所以要换种⽅式,利⽤-S:filename,更多的命令请输⼊-h查看
2、put,mput,get,mget
FTP登录成功后,需要下载远程单个⽂件时,使⽤get命令,如果下载多个⽂件时,⽤mget,它⽀持通配符,在使⽤mget时,需要对每⼀个⽂件都进⾏选择Y/N,如果想不交互的下载全部的⽂件,可以输⼊⼀次prompt命令关闭交互⽅式。
Mput和mget命令要注意两个问题:
不能对⽬标⽂件指定命字,在命令⾏上所有的⽂件都视做源⽂件
mput,mget两个命令不能对⽬录进⾏上传与下载,只能对⽂件
Prompt:每次执⾏⼀个这个命令,就在on ,off之间循环,ftp脚本开始时,prompt默认为on,所以⼀般在上传、下载⽂件时,执⾏⼀次prompt,把交互式的on关掉,变为off。批处理文件注释
当然Mput和Mget可以使⽤多次的put和get代替,这个时候就不需要关闭交互⽅式
3、⽂件的传输⽅式:
Binary ,⼆进制传输
Ascii ,ascII传输
在FTP⽂件传输过程中,ASCII传输HTML和⽂本编写的⽂件,⽽⼆进制码传输可以传送⽂本和⾮⽂本(执⾏⽂件,压缩⽂件,图⽚等),具有通⽤性,⼆进制码传输速度⽐ASCII传输要快,所以在建⽴bat脚本时,⼀般输⼊bin命令,启⽤⼆进制传输。如果⽤ASCII模式传输⾮⽂本⽂件,可能会显⽰⼀堆乱码,如果是上传⼀些CGI脚本,有可能将⽆法运⾏这类脚本,⽽在浏览器上看到server 500 error的错误。
Ascii和binary模式的区别是回车换⾏的处理。binary模式不对数据进⾏任何处理,asci模式将回车换⾏转换为本机的回车字符,⽐如Unix下是\n,Windows下是\r\n,Mac下是\r。unix系统下⾏结束符是⼀个字节,即⼗六进制的0A,⽽ms的系统是两个字节,即⼗六进制的0D0A。所以当你⽤ascii⽅式从unix的ftp server下载⽂件时(不管是⼆进制或者⽂本⽂件,redhat的 vsftp默认是binary,ascii默认关闭),每检测到⼀个字节是0A,就会⾃动插⼊⼀个0D,所以如果你的⽂件是⼆进制⽂件⽐如可执⾏⽂件、压缩包什么的,就肯定不能⽤了。如果你的⽂件就是unix下的⽂本⽂件,你⽤ ascii模式是正确的,要是误⽤了binary模式,你在windows上看这个⽂件是没有换⾏的,⾥⾯是⼀个个的⿊⽅块。
在⽤FTP客户端传输⽂件时,因为这些软件都做得⽐较智能化,它可以根据后缀,⾃动启⽤传输模式,所以不⽤担⼼出问题。
4、lcd:
ftp中⽤lcd切换本地路径,⽤cd切换远程服务器的路径。常⽤到的命令如下:
cd⽬录名(进⼊服务器⽬录) lcd⽬录名(进⼊本机⽬录)
cd \(退到服务器根⽬录) lcd \(退到本机根⽬录)
cd ..(退回到上⼀级⽬录) lcd ..(退回到上⼀级⽬录)
5、dir
注意:你成功登陆后就可以⽤dir查看命令查看FTP服务器中的⽂件及⽬录,⽤ls命令只可以查看⽂件。
6、mkdir qint
注意:在FTP服务器上根⽬录下建⽴qint⽬录
7、cd qint
注意:进⼊⽬录qint,⽤“cd 你的⽬录名”可以进⼊当前⽬录的下⼀级⽬录,这跟DOS⼀样。
8、lcd d:\qint
注意:定位本地默认⽂件夹,在前⾯已事先在D:盘创建
9、delete *.*
注意:删除服务器对应⽬录qint中的所有⽂件。
10、cd ..
注意:返回⾄上⼀级⽬录,即根⽬录。返回上⼀级⽬录⽤“cd ..”要注意,中间有空格。返回根⽬录⽤“cd \”。
11、mrdir qint
注意:删除⽬录qint。删除⽬录,在此⽬录下不能有⽂件及⽬录,不然将⽆法删除。
12、bye
注意:退出FTP服务器。
上传下载时特别要注意服务器及本地电脑的当前⽬录,⽂件是从哪⾥到哪⾥的问题。查看FTP服务器的当前⽬录命令为pwd,可以⽤cd命令定位服务器的⽬录。可以⽤lcd命令定位本地电脑的⽬录。
以上实例应⽤到了采⽤FTP命令⾏⽅式上传下载的最常⽤命令,你还可以⽤命令“?”查看更多的命令
需要注意的是:在使⽤关于ftp的bat⽂件的时候,不能把⽂件的名字命名为ftp,不然就回陷⼊死循环:
bat中⽤Telnet连接linux
⽂件都上传好了,下⾯就是要到服务器端运⾏sh脚本了,这个时候可以使⽤Telnet,也可以windows装
软件,使⽤ssh。这⾥我只介绍Telnet。
不啰嗦,直接上代码:
.vbs代码,.vbs和.bat必须放在同⼀⽬录下
set sh=WScript.CreateObject("WScript.Shell")
WScript.Sleep 300
sh.SendKeys "open 122.67.109.176{ENTER}"
WScript.Sleep 300
sh.SendKeys "username{ENTER}"
WScript.Sleep 400
sh.SendKeys "password{ENTER}"
WScript.Sleep 400
sh.SendKeys "cd /data/install/pacakge{ENTER}"
WScript.Sleep 400
sh.SendKeys "sh install.sh{ENTER}"
WScript.Sleep 400
sh.SendKeys "exit{ENTER}"
WScript.Sleep 300
sh.SendKeys "{ENTER}"
WScript.Sleep 300
sh.SendKeys "quit{ENTER}"
.bat代码
rem 启动telnet
rem batch telnet
cscript //nologo tel.vbs
del tel.vbs
通过把操作重定向到⽂件中,然后运⾏Telnet。解释就不解释了,⼤家按照这个⽅法时可以得到⾃⼰想要的结果的。终于,完成了任务,也学到了很多,如果有什么不⾜的⼤家可以留⾔呦,互相学习
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论