BAT批处理学习(一)

一个导致我要学习bat批处理的原因是因为我所在的公司要让我部署一个jar包到一台windows服务器上,但是我们都知道,如果使用过命令行CMD启动,那么必然会有一个黑黑的命令行的框框在那里,也不是说它丑,但的确也算不上美观。因为这个服务器是跟别人共用的,那么必然会出现一个问题,要是别人登上这个服务器后误关了,那不就芭比Q了吗,所以我第一个想到的是让jar包后台运行,但是后来想了想,既然都可以后台运行了,那么要不然我再写个脚本?这样每次就只需要双击就可以实现启动、关闭、重启了,于是我有了以下的脚本内容:

  • start.bat
@echo off 
setlocal EnableDelayedExpansion

set pid=0

set port=8080
for /f "tokens=5" %%a in ('netstat -aon ^| findstr %port%') do (
    set pid=%%a
)
if "%pid%"=="0" (
    echo try start the programing with the test environment
    start javaw -jar -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms512m -Xmx512m -Xmn256m -Xss256k -XX:SurvivorRatio=8 xxx.jar 
    echo the programing is started
) else (
    echo the programing is already running or the port !port! is not free, please check and try again...
    pause
    exit
)
pause
  • stop.bat
@echo off 
setlocal EnableDelayedExpansion

set pid=0

set port=8080
for /f "tokens=5" %%a in ('netstat -aon ^| findstr %port%') do (
    set pid=%%a
)
if "%pid%"=="0" (
    echo port !port! is not running
) else (
    echo pid = [!pid!]
    taskkill /f /pid !pid!
    echo the programing which in running on port !port! has been killed
)
pause
  • restart.bat
@echo off 
setlocal EnableDelayedExpansion

set pid=0

set port=8080
for /f "tokens=5" %%a in ('netstat -aon ^| findstr %port%') do (
    set pid=%%a
)
if "%pid%"=="0" (
    echo port !port! is not running
) else (
    echo pid = [!pid!]
    echo stoping the programing. please wait...
    taskkill /f /pid !pid!
    echo the programing which in running on port !port! has been killed
)

echo try start the programing with the test environment

start javaw -jar -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms512m -Xmx512m -Xmn256m -Xss256k -XX:SurvivorRatio=8 xxx.jar

echo the programing is started

pause

但是说实话,我写上边的内容的时候,都是边查资料边参考前人写的内容写出来的,好在,可以正常工作。有人可能会问,为啥不弄成自启服务?emmmmm,一个重要的原因,运维说最好不要乱下一些软件到服务器上,所以只能采用这个比较笨的方法了,虽然无法自启,但是启动起来也还好,勉勉强强能用。

搞这个东西的过程中,感觉有点意思,以前也有简单接触过,但是基本都忘记了,所以我决定大概学它个七七八八。

好了,前言介绍完了,接下来都是笔记,可能比较乏味,将就看哈~


学习之前,先了解一个指令pause,见词思意,是暂停的意思,即我们经常会看到命令行中出现请按任意键继续...,就是这个指令的效果。


1. 显示信息:echo

这个其实没啥太多好说的,就是一个输出,很类似于各种编程语言里边的打印

  • 打开cmd,然后输入:
C:\Users\necde>echo hello,world
hello,world

因为我们是说的bat批处理,所以还是要准备一个.bat文件的,在随便一个地方(比如 D:\personal\bat_workspace\)创建一个以.bat为后缀的文件,如mybat.bat

  1. 键入以下信息
echo hello,world
echo my name is neco
pause

执行的结果如下

D:\personal\bat_workspace>echo hello,world
hello,world

D:\personal\bat_workspace>echo my name is neco
my name is neco

D:\personal\bat_workspace>pause
请按任意键继续. . .
  1. 如果要取消输入指令的输出,即取消类似D:\personal\bat_workspace>****的显示,只需要在具体指令之前加入@,修改后的内容如下:
@echo hello,world
@echo my name is neco
@pause

执行结果如下:

hello,world
my name is neco
请按任意键继续. . .
  1. 也可以在bat脚本前面使用@echo off关闭输入指令的输出
@echo off
echo hello,world
echo my name is neco
pause

该方法与上边 2 的执行效果一致

  1. 如果要输出空行,即相当于只有一个回车,则可以使用
echo.

这里.要紧跟在echo后,当然.也可以使用,:;"/]+\中的任意一个替代,如果真的好奇,可以自行尝试
5.echo和管道命令|的结合使用
格式:echo 回复|其他的指令 (如果回复是指输入enter回车,则大概的示例如下 echo.|其他的指令)

  • 例子1:输出当前时间后输入一个回车
D:\personal\bat_workspace>echo.|time
当前时间: 14:41:59.26
输入新时间:

D:\personal\bat_workspace>
  • 例子2:删除指定目录后输入y
D:\personal\bat_workspace>echo y|rd /s test
test, 是否确认(Y/N)? y

D:\personal\bat_workspace>
  1. 可以使用echo将内容写入到指定文件中,如果文件不存在则会创建文件
  • 输出内容到指定文件
D:\personal\bat_workspace>echo hello,world>hello.txt

查看文件


hello.txt

也有人说可以用echo来创建文件,如使用

echo.>tmp.txt

但这其实也是将换行写入了tmp.txt中,本质还是将内容写入到指定文件,另外,这里的写入是覆盖形式的,即执行指令后目标文件原本的内容会被覆盖。


2. 注释语句:rem

rem为注释命令,即类似编程中的注释符号,rem后面的内容不会被执行。另外也常用::当注释用,程序通用会忽略::后的内容,但如果是:字母开头的字符串,程序可以将其识别为标号(结合goto使用),具体的例子如下:

  • 例子:
@echo off
echo this is an example for rem and ::
rem this is a comment line
:: this is also a comment line
pause
  • 执行结果:
this is an example for rem and ::
请按任意键继续. . .

3. 目录切换:cd

这个是比较常用的命令了,直接上例子吧

  • 返回上一层
D:\personal\bat_workspace>cd ..

D:\personal>
  • 进入指定目录
D:\personal>cd bat_workspace

D:\personal\bat_workspace>
  • 返回根目录
D:\personal\bat_workspace>cd \

D:\>
  • 切换盘符,这个比较特殊,可以给出几种切换失败的例子
D:\>cd C:
C:\

D:\>cd C
系统找不到指定的路径。

D:\>cd C\
系统找不到指定的路径。

D:\>cd /C
系统找不到指定的路径。

D:\>

正确的例子

  • 标准方法
D:\>cd /d C:

C:\>
  • 推荐方法,更简单
C:\>D:

D:\>
  • 另一个用法,获取当前目录完整路径,即会输出当前目录的完整路径,就当linux的pwd来用好了
D:\personal\bat_workspace>cd
D:\personal\bat_workspace

D:\personal\bat_workspace>

4. 罗列文件:dir

就当做是linux的 ll 用法来用就好,使用的例子如下:

D:\personal\bat_workspace>dir
 驱动器 D 中的卷是 新加卷
 卷的序列号是 009E-ECFE

 D:\personal\bat_workspace 的目录

2023/10/19  15:07    <DIR>          .
2023/10/19  10:27    <DIR>          ..
2023/10/19  15:08               116 example2.bat
2023/10/19  14:52                13 hello.txt
2023/10/19  15:06                56 mybat.bat
2023/10/19  14:49                 2 test.txt
               4 个文件            187 字节
               2 个目录 244,904,079,360 可用字节

D:\personal\bat_workspace>

至于其他的用法,说明我也列一下(使用 dir /? 即可查看)

D:\personal\bat_workspace>dir /?
显示目录中的文件和子目录列表。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  [drive:][path][filename]
              指定要列出的驱动器、目录和/或文件。

  /A          显示具有指定属性的文件。
  属性         D  目录                R  只读文件
               H  隐藏文件            A  准备存档的文件
               S  系统文件            I  无内容索引文件
               L  重新分析点          O  脱机文件
               -  表示“否”的前缀
  /B          使用空格式(没有标题信息或摘要)。
  /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
              禁用分隔符显示。
  /D          跟宽式相同,但文件是按栏分类列出的。
  /L          用小写。
  /N          新的长列表格式,其中文件名在最右边。
  /O          用分类顺序列出文件。
  排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  反转顺序的前缀
  /P          在每个信息屏幕后暂停。
  /Q          显示文件所有者。
  /R          显示文件的备用数据流。
  /S          显示指定目录和所有子目录中的文件。
请按任意键继续. . .

以上是第一篇相关分享,更多相关知识后边会慢慢分享出来~


如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 最近初略的看完了《批处理标准教程-MHL版本》,把教程中的一些对我有帮助的资料转为MD格式,就当是做个笔记,加深记...
    禾白小三飘阅读 1,412评论 1 7
  • 前言简介 批处理文件(batch file)包含一系列 DOS命令,通常用于自动执行重复性任务。用户只需双击批处理...
    蒋_Sir阅读 6,773评论 0 3
  • 题外话:又到了周三晚上,2019年下半年的学习目标一也已经告一段落,就把最近学习总结的批处理发出来了,一则是方便以...
    炉石不传说阅读 548评论 0 1
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,678评论 0 11
  • 之前项目用到了MySQL、Redis、MongoDB和其他一些独立的jar包程序,测试的时候需要用脚本配置java...
    程序猿小董阅读 696评论 0 0