看完这篇文章,你将了解
- 如何在 cmd 中设置变量
- 如何在 cmd 中实现判断逻辑 (if 语句)
- 如何在 cmd 中实现循环逻辑 (goto 语句)
- 怎么做到 "按任意键继续..." (pause 语句)
- 如何拼接字符串
- 写脚本时经常用到的特殊变量
- 其他细节(注释, 窗体设置等)
最后给出两个实例,组合并运用以上内容
扯淡前言
- cmd 脚本的保存
用文本编辑工具(如记事本)编写脚本,后缀名保存为 .bat 或 .cmd 即可
cmd 脚本的编写测试
@echo off 脚本语句 pause
- @echo off 关闭回显,使脚本语句本身不在窗口打印
- pause 防止脚本执行完毕后立即关闭
一. 设置变量的方法
set char=0123456789 设置变量
echo %char% 显示变量
echo %char:~3,4% = %char%.substr(3, 4),这里是 3456
注意这里等号两边不能有空格,比如:
set char = 0123456789 X
set char=0123456789 √
此外,
- 直接输入
set
会显示当前所有可用的环境变量 - 直接输入
set 前缀
会列出对应前缀的环境变量 set /a
可以计算数字表达式
比如:
set 打印环境变量
set a=1
set a 打印以 a 开头的环境变量(包括 a=1)
set /a b=1+2*3
二. if 语句
比较数值大小
if %number% gtr 100 echo 变量大于100
if %number% equ 100 echo 变量等于100
if %number% lss 100 echo 变量小于100
判断字符串是否相等
if %str1%==%str2% 字符串相等
if not %str1%==%str2% 字符串不相等
判断文件是否存在
if exist 文件名 存在文件
if not exist 文件名 不存在文件
三. goto 语句
goto :label 直接跳转到 :label 这一行
goto :eof 直接结束脚本 (它的原理是直接跳转到脚本最后一行)
如果说 pause 是暂停,那么 goto :eof 就是停止
虽然说 cmd 原生提供了 for 语法,但是 if + goto 组合也不失为一个实现循环的办法(见后文脚本示例)
四. pause
pause 的作用是暂时中断程序,等用户按下其他键继续
- 只有 pause,效果是暂停并打印 “请按任意键继续...”
- pause>nul ,效果是无回显暂停
如果希望自定义暂停时的回显,可以这样
echo 按任意键结束程序 & pause>nul
五. 拼接字符串
比如
set str1=localhost
set str2=8080
set str=%str1%:%str2%
echo %str% localhost:8080
六. 常用特殊变量
- 字符串的 substr 符号是
:~
- 读取拖入文件的变量是
%~nx1
- 脚本文件当前目录
%CD%
- 日期
%DATE%
- 时间
%TIME%
- 随机数
%RANDOM%
随机数返回 0 到 32767
比较有用的变量应该是 %~nx1
比如:把一个文本文件拖进以下脚本,可以打印它的内容
@echo off
type %~nx1
pause
再比如:写一个 nodejs 工具 index.js,读取第一个参数作为文件名,将这个文件进行某种处理,套路是
@echo off
node %~nx1
pause
我们要处理某个文件,直接将它拖到 bat 身上就 ok 了
此外,%~nx2
, %~nx3
, ......, %~nx9
分别表示多个文件同时拖入脚本时,第 2,3,......,9 个文件
七. 其他细节(注释语句,窗体设置)
:: 注释内容
color 12 表示窗口 background 设为 1 号,color 设为 2 号
mode con cols=100 lines=100 设置窗口大小为 100 列 100 行
脚本示例
- 爬虫脚本
下载一个 PS 网站的所有教学视频
@echo off
set iterator=1
set front=http://pic1.16xx8.com/9video/
:A
set url=%front%%iterator%.swf
start %url%
set /a iterator+=1
if %iterator% gtr 100 pause
goto :A
pause>nul
- 文件备份
准备一个 U 盘,写入以下脚本。执行后,可将目标电脑的所有 png 结尾的文件拷贝到 U 盘
@echo off
:: 这里假设盘符是 G, 根据实际情况修改
cd C:
xcopy /s /H *.png G:/
cd D:
xcopy /s /H *.png G:/
cd E:
xcopy /s /H *.png G:/
cd F:
xcopy /s /H *.png G:/
pause>nul
暂无评论