cmd指令,bat脚本【完美解析】

555 阅读4分钟

本文已参与「新人创作礼」活动.一起开启掘金创作之路。

cmd指令的剖析

  • %查看相对路径或是源目标
  • %~x查看文件名后缀
  • %~n查看文件名不含后缀
  • %~z查看大小
  • %~s查看绝对简写路径
  • %~f查看绝对路径
  • %~d查看盘符
  • %~t查看修改时间
  • if [not] defined variable 可以判断变量是否有内容
  • %~I 删除外围"引号
  • %~fI 完整路径
  • %~dI 驱动器号
  • %~pI 路径
  • %~nI 文件名
  • %~xI 文件扩展名
  • %~dpI: 驱动器号和路径
  • %~nxI: 文件名加扩展名
  • + 命令文件连接符
  • *, ? 文件通配符
  • "" 字符串界定符
  • ^ 转义符,其后面的特殊字符按原样输出
  • | 命令管道符
  • >> 文件重定向符
  • @ 命令行回显屏蔽符
  • / 参数开关引导符
  • : 批处理标签引导符
  • % 批处理变量引导符
  • 组合命令: &
    • 用法: 第一条命令 & 第二条命令 [& 第三条命令...]
    • 同时执行多条命令,而不管命令是否执行成功。
  • &&
    • 用法: 第一条命令 && 第二条命令 [&& 第三条命令...]
    • 同时执行多条命令,当碰到执行出错的命令将不执行后面的命令,如果一直没有出错则一直执行完所以命令。
  • ||
    • 用法: 第一条命令 || 第二条命令 [|| 第三条命令...]
    • 同时执行多条命令,当碰到执行正确的命令将不执行后面的命令,如果一直没有出现正确执行的命令则一直执行完所以命令。
  • | 管道命令
    • 用法: 第一条命令 | 第二条命令 [| 第三条命令...]
    • 将第一条命令的结果作为第二条命令的参数来使用
  • > , >>, 输出重定向命令
    • 将一条命令或某个程序输出结果重定向到特定文件中。> 与 >> 的区别在于:
    • > 会清除原有文件中的内容后写入指定文件,
    • >> 只会追加内容到指定文件中,而不会改变其中的内容。
  • <, >&, <&
    • < 从文件中而不是键盘中读入命令输入。
    • >& 将一个句柄的输出写入到另一个句柄的输入中。
    • <& 从一个句柄读入输入并将其写入到另一个句柄输出中。
  • set [[/a [expression]] [/p [variable=]] string]
  • %CD% 目录(current directory)
  • %DATE% 日期
  • %TIME% 时间
  • %RANDOM% 随机数
  • (,) 分组
  • +,-,*,/,% 算法
  • <<, >> 逻辑移位
  • &, |, ^ 位运算

cmd指令与.bat脚本的注意事项与区分

实际上,在命令行中,单个%号才会起作用,而在.bat脚本中,有些作用域也就是大括号中的%号不变,作用域外的%号要变成两个%号。

cmd指令中的for循环结构

第一种是(x,y,z)从x到z(x,z都是数字),步长为y.例子中是从1到5,步长为1

 for /l %i in (1,1,5) do

第二种是(x,y,z)表示就是在x,y,z三个值的时候

 for  %i in (1,2,3) do 

第三种是一种带参数的for循环,tokens是列,skip是跳跃间隔,delims= 表示换行符分隔。表示找这个头文件中,每次换行的值的最后面的文件,全部输出到一个头文件中,如有扩展可以自行修改。

for /f "tokens=2 skip=1 delims= " %i in (.\include\crow.h) do type .\include\crow\%~nxi >> amalgamate\crow_all.h

若是另起一个.bat文件则需要把%号改成%%

for /f "tokens=2 skip=1 delims= " %%i in (.\include\crow.h) do type .\include\crow\%%~nxi >> amalgamate\crow_all.h

copy指令的妙用

如:把文件合并

copy /b 2.txt+3.txt+4.txt  5.txt

上面是合并指定txt类型,下面是合并所有这种txt类型的文件

type *.txt  >> 0.txt

@echo的用途

一般是用来当做console.log来使用,@echo后面一律视为文本

CMD指令的广度扩展,精讲。如何只需要一行就能解决一切?(但便捷往往就不简单)

跳过android studio直接开模拟器

我不想每次都打开android studio,再从中开启模拟器怎么办?我们可以新建一个bat脚本。

  1. 想新建一个脚本,跳过android studio,直接开启模拟器,先使用下面的代码,那么然后保存为一个.bat文件,双击即可启动
for /f "delims= " %%i in ('findstr /m ".ini" %%UserProfile%%\.android\avd\*.ini') do (
%ANDROID_HOME%\emulator\emulator -netdelay none -netspeed full -avd %%~ni)

解决有时adb连接不上android

有时候开启了安卓模拟器,但是却手误按错了把其关闭,有时候程序退出的不干净,你点的过快导致无响应然后瞬间结束,这个时候往往会导致残留的进程存在在系统里面

  1. adb连接不上android 报错5037端口,那么此时就出现了残留 ,例如:我想找到5037端口pid同时杀掉该进程。其他端口只需要改最前面的数字即可
netstat -ano|findstr 5037>u &(for /f "tokens=5 delims= " %i in (u) do taskkill /pid %i -f)& del /s /q u