bat是windows的dos界面下对于各种命令操作的一中批处理语言,可以作为胶水语言连接其他语言,也可以处理简单的操作以及执行操作系统命令。
普通文本文件后缀改成.bat
就可以成为批处理文件
注释
REM xxx
:: xxx
基础美观操作
-
title newTitle
设置标题 -
color 01
设置颜色,0是黑色背景,1是蓝色前景。其他搭配见color /?
-
mode con cols=113 lines=15 & color 9f
设置列113、行15、颜色9f -
pause
暂停,提示任意输入继续
转义
-
,
相当空格 -
^
转义字符 -
命令1;命令2
报错后会继续执行
基础输入输出
-
echo "你想说什么"
输出文字 -
echo off
关闭c:\user>_ 的前缀及其他提示,只留下光标 -
echo on
恢复回显 -
@echo off
连自身的命令回显都不要 -
echo.
输出空行,换行 -
echo "somethine">filename
把信息写入文件(覆盖) -
echo "somethine">>filename
把信息写入文件(追加) -
echo (Ctrl+G)
喇叭鸣响,对个ctrl+G可响多次 -
%0 %1 %2
调用批处理时传的参数,%0
自身%1
第1个
例:复制自身
copy %0 d:\wind.bat
-
set /p choice= 输入一个字符:
获取输入
组合命令
-
第一个命令|第二个命令
管道命令,第一个的输出当成第二个的输入。
例:
dir c:\|find “txt”
-
命令一&命令二
组合执行等于
(
命令一
命令二
)
-
&& 和 ||
同java短路
循环for
-
for %%i in (set) do somthing
有/d /l /r /f 四个属性
/D属性 -
for /d %%i in (c:\*) do echo %%i
搜索C盘下的文件 -
for /d %%i in (???) do echo %%i
搜索当前目录下有1-3个字母的文件
/R属性 -
FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
/r后制定根目录,遍历目录树,如果没有路径默认当前目录。set为匹配规则 -
for /r c:\ %%i in (*.exe) do echo %%i
找c盘下的exe文件
/L属性 -
for /l %%i in (0,2,6) do @echo %%i
从0开始,每次加2,直到6.
/F属性 -
FOR /F “eol=; tokens=1,3* delims=,- ” %%i in (test.txt) do echo %%i %%j %%k
处理文件test.txt
eol=; 分号开头的行为注释行
tokens=1,3* 将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%k
delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后
循环if
- 判断
set /p p=请输入
if %p% LEQ 9 (
echo %p%
) else (
echo 9
)
- 关系符
含义 | 关系符 |
---|---|
等于 | equ |
大于 | gtr |
大于或等于 | geq |
小于 | lss |
小于或等于 | leq |
不等于 | neq |
- 存在
if exist %cd%\test.LOG (
echo 存在!
)
- 不存在
if not exist %cd%\test.LOG (
echo 不存在!
)
跳转
-
:start
标注一个叫start的点 -
GOTO start
跳转到start
文件关联
-
assoc
设置’文件扩展名’关联,关联到’文件类型’ -
ftype
设置’文件类型’关联,关联到’执行程序和参数’ -
assoc
显示所有’文件扩展名’关联 -
assoc .txt
显示.txt代表的’文件类型’,结果显示 .txt=txtfile -
assoc .doc
显示.doc代表的’文件类型’,结果显示 .doc=Word.Document.8 -
assoc .exe
显示.exe代表的’文件类型’,结果显示 .exe=exefile -
ftype
显示所有’文件类型’关联 -
ftype exefile
显示exefile类型关联的命令行,结果显示 exefile=”%1” %* -
assoc .txt=Word.Document.8
设置.txt为word类型的文档,可以看到.txt文件的图标都变了
ftype exefile=”%1” %*
恢复 exefile 的正确关联
如果该关联已经被破坏,可以运行 command.com ,再输入这条命令
变量延迟
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5
文件权限
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]
+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
[drive:][path][filename]
指定要处理的文件属性。
/S 处理当前文件夹及其子文件夹中的匹配文件。
/D 也处理文件夹。
系统变量
-
%ALLUSERSPROFILE%
本地 返回“所有用户”配置文件的位置。 -
%APPDATA%
本地 返回默认情况下应用程序存储数据的位置。 -
%CD%
本地 返回当前目录字符串。 -
%CMDCMDLINE%
本地 返回用来启动当前的 Cmd.exe 的准确命令行。 -
%CMDEXTVERSION%
系统 返回当前的“命令处理程序扩展”的版本号。 -
%COMPUTERNAME%
系统 返回计算机的名称。 -
%COMSPEC%
系统 返回命令行解释器可执行程序的准确路径。 -
%DATE%
系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关
date 命令的详细信息,请参阅 Date。 -
%ERRORLEVEL%
系统 返回上一条命令的错误代码。通常用非零值表示错误。 -
%HOMEDRIVE%
系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 -
%HOMEPATH%
系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 -
%HOMESHARE%
系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 -
%LOGONSERVER%
本地 返回验证当前登录会话的域控制器的名称。 -
%NUMBER_OF_PROCESSORS%
系统 指定安装在计算机上的处理器的数目。 -
%OS%
系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。 -
%PATH%
系统 指定可执行文件的搜索路径。 -
%PATHEXT%
系统 返回操作系统认为可执行的文件扩展名的列表。 -
%PROCESSOR_ARCHITECTURE%
系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium -
%PROCESSOR_IDENTFIER%
系统 返回处理器说明。 -
%PROCESSOR_LEVEL%
系统 返回计算机上安装的处理器的型号。 -
%PROCESSOR_REVISION%
系统 返回处理器的版本号。 -
%PROMPT%
本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 -
%RANDOM%
系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 -
%SYSTEMDRIVE%
系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。 -
%SYSTEMROOT%
系统 返回 Windows server operating system 根目录的位置。 -
%TEMP%
和%TMP%
系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。 -
%TIME%
系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关
time 命令的详细信息,请参阅 Time。 -
%USERDOMAIN%
本地 返回包含用户帐户的域的名称。 -
%USERNAME%
本地 返回当前登录的用户的名称。 -
%USERPROFILE%
本地 返回当前用户的配置文件的位置。 -
%WINDIR%
系统 返回操作系统目录的位置。
自动ftp下载
ftp -n -s:[[drive:]path]filename
filename文件内容
open 90.52.8.3 #打开ip
user iware #用户为iware
password8848 #密码
bin #二进制传输模式
prompt
cd tmp1 #切换至iware用户下的tmp1目录
pwd
lcd d:\download #本地目录
mget * #下载tmp1目录下的所有文件
bye #退出ftp
通过ping实现延迟,完成进度条
@echo off
mode con cols=113 lines=15 &color 9f
cls
echo.
echo 程序正在初始化…
echo.
echo ┌──────────────────────────────────────┐
set/p= ■<nul
for /L %%i in (1 1 38) do set /p a=■<nul&ping /n 1 127.0.0.1>nul
echo 100%%
echo └──────────────────────────────────────┘
pause
随机数
生成5个100以内的随机数
@echo off
setlocal enabledelayedexpansion
for /L %%i in (1 1 5) do (
set /a randomNum=!random!%%100
echo 随机数:!randomNum!
)