bat的使用笔记

Posted by Steve on June 2, 2020

批处理就随用随查了,感觉也没必要单独学习。所以这里就记录下怎么用bat的,然后积累些bat的用法

爱徒ZP吐槽说“A刚提了一版前端,B又改了bug也要部署一版🤦‍”。<br> 鄙人心有不忍,说“是不是可以尝试写个bat文件来把整个流程自动化起来”。<br> 故有了第一部分 1. 删除文件夹+npm build+jar打包

1. 常用cmd命令

查找端口占用

C:\Users\liutianyu>netstat -ano |findstr "8083"
  TCP    0.0.0.0:8083           0.0.0.0:0              LISTENING       21392
  TCP    127.0.0.1:8083         127.0.0.1:8918         TIME_WAIT       0
  TCP    127.0.0.1:8083         127.0.0.1:9586         TIME_WAIT       0

追IP数据包访问目标时所选择的路径

C:\Users\liutianyu>tracert www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [220.181.38.149] 的路由:

  1     *

2. 删除文件夹+npm build+jar打包

注:主要内容都是ZP完成,我只是稍微做了一丢丢优化。好了,废话不多说,先贴文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
:@=========================================
:@注:defaultBranch为默认分支,若有需要可自行修改
:@=========================================
set defaultBranch=master_test
echo 目前配置的默认分支为%defaultBranch%
set /p branch=请输入要打包的分支名,若使用默认配置则回车即可:
if  "%branch%"=="" (set branch=%defaultBranch%)
rd /s /Q .\dist\
mkdir dist
echo 开始将分支切换为%branch%
git checkout %branch%
echo 开始拉取代码
git fetch
git pull
echo 完成代码拉取!
echo ********************************************
echo 开始npm build
call npm -v
call npm run build
echo ********************************************
cd dist
echo 开始打war包
jar -cvf test.war *
echo 结束
pause

下载bat文件

知识点:

  • windows的bat文件要用GBK编码,不然会出现乱码的情况。
  • @echo off命令行中就不会出现具体的命令输入,只会有echo的输出以及命令的标准输出。
  • set可以设置变量,=号要紧跟变量名。后续使用变量时要用%%来包裹起来。
  • rd来删除文件夹
  • 当使用一些外部命令的时候,可以使用call来进行调用,不然脚本会停止不会继续。(不过不知道为啥git没问题,npm执行后就会卡住)
  • pause,脚本执行结束后可以暂停

3. 备份数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@echo off

REM 声明采用UTF-8编码
chcp 65001

echo.
echo MySQL数据库备份脚本
echo.
echo *****************************
echo.
echo 备份日期:%date%
echo 备份时间:%time%
echo.
echo *****************************
echo.
echo 开始备份...
echo.
::set nowtime=%date:~3,4%年%date:~8,2%月%date:~11,2%日%time:~0,2%时%time:~3,2%分
set "nowtime=%date:~3,4%%date:~8,2%%date:~11,2% %time:~0,2%%time:~3,2%"
set "nowtime=%nowtime: =0%"
::数据库名称
set dbname=forlovetolove
::数据库的账号
set user=root
::数据库密码
set password=xixixihahaha
::数据库地址
set host=127.0.0.1
::数据库端口
set port_num=3306

::执行导出操作
 "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqldump" --column-statistics=0 --default-character-set=utf8mb4 -P%port_num% -h%host% -u%user% -p%password% %dbname%  > %dbname%_%nowtime%.sql

echo.
echo MySQL数据库备份完成
echo.

@echo on
@pause

下载bat文件

知识点:

  • 由于没有配置环境变量,导致mysqldump需要使用绝对路径来执行。对于绝对路径的命令执行,如果路径中包含中文,使用双引号包住就可以使用了。
  • 如果使用mysqldump时出现 mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'spv' AND TABLE_NAME = '_task_work';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)的错误,则使用 --column-statistics=0来处理。

4. 批量开启软件(call和start的区别)

为了隔离cookie,进行多账号的测试。将Chrome进行了双开(实际开了8个🤭)。如何进行Chrome双开,可以参考微博链接。每次点点点很麻烦,最后生成的脚本如下。

1
2
3
4
5
6
7
start MyGoogleChrome.lnk
start test1.lnk
start test2.lnk
start test3.lnk
start test4.lnk
start test5.lnk
start test6.lnk

下载bat文件

知识点:

最初尝试了call命令,发现只能打开一个Chrome,后面的都不执行了。后来查了下,大概总结如下。不是100%确定,但是我不太想自己研究了😜

call设计之初是在当前的进程中执行另一个bat文件,可以传参也可以接收该bat文件的执行结果出参。可以理解为将多个bat文件编排顺序执行。但是同时也只有收到另一个bat文件的执行完成的指令后才会继续执行。相较于call的调用,start就是执行,完全另起一个进程,虽然可以传递参数,但是不会接收执行完成的出参接口。

5. 查看笔记本电脑电池健康度

在cmd窗口执行 powercfg /batteryreport /output "D:\DianChi.html"命令后,电池使用情况会输出至指定路径。其中DESIGN CAPACITY是设计容量,FULL CHARGE CAPACITY是完全充满的容量,计算一下就可以知道电池损耗了。

6.使用SSH

在cmd窗口执行 ssh -p 22 nvidia@10.10.10.27"命令后,键入密码即可连接。好像Windows默认没有这个功能,需要额外在windows附加功能中启用。

7.MD5、SHA1、SHA256

Windows自带的命令行可以计算MD5值。

1
2
3
4
C:\Users\gavin\Downloads>certutil -hashfile digiKam-7.8.0-Win64.exe md5
MD5 的 digiKam-7.8.0-Win64.exe 哈希:
aded053df9d385926a3232156faa36ca
CertUtil: -hashfile 命令成功完成。

注:把“md5”换成“SHA1”、“SHA256”即可计算别的值。

8.使用diskpart

8.1.解决Window不能自动分配移动硬盘盘符的问题

1
C:\Users\gavin>diskpart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Microsoft DiskPart 版本 10.0.22621.1
Copyright (C) Microsoft Corporation.
在计算机上: SURFACELAPTOPGO
DISKPART> list disk
  磁盘 ###  状态           大小     可用     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  磁盘 0    联机              238 GB      0 B        *
  磁盘 1    联机             3726 GB      0 B        *
  磁盘 2    联机              232 GB      0 B
  磁盘 3    联机             3726 GB      0 B        *
DISKPART> select disk 2
磁盘 2 现在是所选磁盘。
DISKPART> list part
  分区 ###       类型              大小     偏移量
  -------------  ----------------  -------  -------
  分区      1    主要                 232 GB  1024 KB
DISKPART> select partition 1
分区 1 现在是所选分区。
DISKPART> attributes volume
只读                   : 否
隐藏                   : 否
没有默认驱动器号       : 是
卷影副本               : 否
DISKPART> attributes volume clear hidden
卷属性清除成功。
DISKPART> attributes volume clear NoDefaultDriveLetter
卷属性清除成功。
DISKPART> attributes volume
只读                   : 否
隐藏                   : 否
没有默认驱动器号       : 否
卷影副本               : 否
DISKPART>

更新日志

  • 2020年6月2日:初稿,1. 删除文件夹+npm build+jar打包
  • 2020年7月5日:增加2. 备份数据库
  • 2020年10月12日:增加3. 批量开启软件(call和start的区别)
  • 2021年5月19日:增加4. 常用cmd命令
  • 2021年9月5日:增加追IP数据包访问目标时所选择的路径
  • 2022年7月15日:增加6.使用SSH
  • 2022年12月5日:增加7.MD5、SHA1、SHA256
  • 2023年2月4日:增加8.使用diskpart

友链