0%

windows下批处理BAT简单用法

文章字数:1850,阅读全文大约需要7分钟

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”

  • 命令一&命令二组合执行等于
    1
    2
    3
    4
    (
    命令一
    命令二
    )
  • && 和 || 同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
    1
    2
    3
    eol=;          分号开头的行为注释行
    tokens=1,3* 将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%k
    delims=,- (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后

    循环if

  • 判断
    1
    2
    3
    4
    5
    6
    set /p p=请输入
    if %p% LEQ 9 (
    echo %p%
    ) else (
    echo 9
    )
  • 关系符
含义 关系符
等于 equ
大于 gtr
大于或等于 geq
小于 lss
小于或等于 leq
不等于 neq
- 存在
1
2
3
if exist %cd%\test.LOG (
echo 存在!
)
- 不存在
1
2
3
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 ,再输入这条命令

变量延迟

1
2
3
4
5
6
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5

文件权限

1
2
3
4
5
6
7
8
9
10
11
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文件内容

1
2
3
4
5
6
7
8
9
10
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实现延迟,完成进度条

1
2
3
4
5
6
7
8
9
10
11
12
@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以内的随机数

1
2
3
4
5
6
@echo off
setlocal enabledelayedexpansion
for /L %%i in (1 1 5) do (
set /a randomNum=!random!%%100
echo 随机数:!randomNum!
)