.bat 批处理文件使用 Windows 命令提示符 (cmd.exe) 的命令。以下是一些最常用和重要的批处理命令及其用法示例:
核心命令
- @ - 隐藏当前行命令的回显
bat
@echo 这条命令本身不会显示出来 - echo - 显示消息/开关命令回显
bat
echo Hello World :: 输出文本
echo off :: 关闭后续命令的回显
echo on :: 开启命令回显
echo %PATH% :: 显示环境变量 - rem - 注释
bat
rem 这是一个注释,不会执行 - pause - 暂停执行
bat
echo 按任意键继续…
pause >nul :: >nul 隐藏"按任意键继续…"提示
文件/目录操作 - cd - 切换目录
bat
cd \ :: 切换到根目录
cd … :: 切换到父目录
cd “C:\Program Files” :: 切换带空格的路径 - dir - 列出目录内容
bat
dir :: 列出当前目录
dir /b :: 简洁列表(仅文件名)
dir *.txt :: 列出所有txt文件 - copy - 复制文件
bat
copy file1.txt file2.txt :: 复制文件
copy *.txt backup\ :: 复制所有txt到backup目录
copy /y source.txt dest.txt :: /y 覆盖不提示 - del - 删除文件
bat
del temp.txt :: 删除文件
del /q *.tmp :: /q 安静模式(不确认) - md/mkdir - 创建目录
bat
md new_folder
mkdir “C:\My Data” - rd/rmdir - 删除目录
bat
rd old_folder :: 删除空目录
rd /s /q temp :: /s 递归删除 /q 不确认 - move - 移动/重命名
bat
move file.txt docs\ :: 移动文件
move old.txt new.txt :: 重命名文件 - type - 显示文件内容
bat
type config.ini :: 显示文本内容
变量操作 - set - 设置变量
bat
set name=John :: 定义变量
echo %name% :: 使用变量
set /p input=请输入: :: 接收用户输入
set /a sum=10+20 :: /a 数学计算(输出30) - 环境变量 - 系统预定义
bat
echo 用户目录:%USERPROFILE%
echo 系统路径:%SystemRoot% :: 通常是C:\Windows
流程控制 - if - 条件判断
bat
if exist file.txt (echo 文件存在)
if not exist folder (md folder)
:: 比较字符串
if “%var%”==“hello” echo 匹配成功
:: 数值比较
set /a num=5
if %num% GEQ 10 (echo 大于等于10) else (echo 小于10)
16. for - 循环
bat
:: 遍历文件
for %%i in (*.txt) do echo 处理文件:%%i
:: 数字循环
for /l %%n in (1,1,5) do echo 当前值:%%n
:: 解析文本
for /f “tokens=1,2” %%a in (data.txt) do echo 第一列:%%a 第二列:%%b
17. goto - 跳转标签
bat
goto :start
:menu
echo 这里是菜单
goto :eof :: 跳转到文件末尾
:start
echo 程序开始
goto :menu
其他实用命令
18. start - 启动程序/窗口
bat
start notepad.exe :: 启动记事本
start “” “C:\Program Files\app.exe” :: 启动带空格的路径
start http://www.google.com :: 打开网页
19. timeout - 等待(Windows XP 用ping模拟)
bat
timeout /t 5 :: 等待5秒(/nobreak 不可中断)
:: XP替代方案:
ping 127.0.0.1 -n 6 >nul :: 等待5秒(ping间隔1秒)
20. cls - 清屏
bat
cls :: 清除控制台内容
21. color - 设置文字/背景色
bat
color 0A :: 0=黑色背景, A=绿色文字(输入color /?查看代码)
22. title - 设置窗口标题
bat
title 我的批处理工具
综合示例脚本
bat
@echo off
title 文件备份工具
color 0B
set /p source=请输入源文件夹:
set backup=%source%backup%date:/=-%
if exist “%backup%” (
echo 备份目录已存在,删除中…
rd /s /q “%backup%”
)
echo 正在备份到 %backup%…
xcopy “%source%” “%backup%” /s /e /i /y
if %errorlevel%==0 (
echo 备份成功!共复制:
dir “%backup%” | find “File(s)”
) else (
echo 备份失败!错误代码 %errorlevel%
)
timeout /t 10
exit
关键技巧
错误处理:用 %errorlevel% 检查上条命令结果
bat
some_command.exe
if %errorlevel% neq 0 echo 错误!代码 %errorlevel%
特殊字符:
输出重定向(echo text > file.txt)
追加输出(echo new >> file.txt)
| 管道(dir | find “txt”)
^ 转义符(echo 特殊符号 ^> ^| ^<)
调试:
去掉 @echo off 查看所有执行命令
在可疑行后加 pause 逐步检查
💡 提示:任何命令后加 /? 可查看帮助(如 for /?)
=====================================
注意:以下命令在Windows命令提示符(cmd.exe)中有效。
- ECHO: 显示消息,或打开/关闭命令回显。
示例:
echo Hello World :: 显示"Hello World"
echo off :: 关闭后续命令的回显(但会显示echo off本身)
@echo off :: 关闭回显,并且不显示echo off命令本身(常用在批处理开头)
echo on :: 打开回显 - REM: 注释命令,后面的内容会被忽略。
示例:
REM 这是一个注释
@REM 这也是注释,而且不会显示出来 - SET: 设置变量。
示例:
set myVar=Hello :: 设置变量myVar为"Hello"
echo %myVar% :: 显示变量的值(输出Hello)
set /p myVar=请输入: :: 提示用户输入,将输入保存到myVar
set /a result=10+20 :: 进行算术运算,将30赋给result(/a表示算术运算) - IF: 条件判断。
示例:
if “%var%”==“value” echo 相等 :: 如果变量var等于"value",则显示"相等"
if exist filename.txt echo 文件存在 :: 如果文件存在,则显示
if not exist folder (echo 文件夹不存在) :: 如果文件夹不存在,则显示
if errorlevel 1 echo 上一个程序退出代码大于等于1 - FOR: 循环命令。
示例:
for %%i in (1,2,3) do echo %%i :: 循环输出1,2,3(在批处理文件中用%%i,命令行中用%i)
for /f “tokens=*” %%a in (file.txt) do echo %%a :: 读取文件每一行
for /f “tokens=1,2 delims=,” %%a in (“aa,bb,cc”) do echo %%a and %%b :: 分割字符串 - GOTO: 跳转到标签。
示例:
goto :mylabel
… 跳过这些行 …
:mylabel
echo 跳转到这里 - CALL: 调用另一个批处理文件,或者调用本批处理中的标签(作为子程序)。
示例:
call another.bat :: 调用另一个批处理文件,执行完后返回
call :subroutine :: 调用本批处理中的标签:subroutine
exit /b :: 退出子程序(或批处理)
:subroutine
echo 子程序
exit /b - START: 启动一个单独的窗口运行指定的程序或命令。
示例:
start notepad.exe :: 启动记事本
start “” “C:\Program Files\SomeApp\app.exe” :: 启动带空格路径的程序 - PAUSE: 暂停执行,显示“请按任意键继续…”。
示例:
pause - EXIT: 退出批处理脚本。
示例:
exit :: 退出
exit /b 1 :: 退出当前批处理脚本(/b表示退出脚本但不退出cmd窗口),并返回错误码1 - CD: 更改目录。
示例:
cd \ :: 切换到根目录
cd … :: 切换到父目录
cd “C:\Program Files” :: 切换到带空格的目录(需要引号) - MKDIR (MD): 创建目录。
示例:
mkdir new_folder :: 创建名为new_folder的文件夹 - RMDIR (RD): 删除目录。
示例:
rmdir /s /q old_folder :: 安静地删除old_folder及其所有子目录(/s表示递归,/q表示安静模式,不询问) - DEL: 删除文件。
示例:
del file.txt :: 删除文件
del /q /f *.tmp :: 安静地强制删除所有.tmp文件 - COPY: 复制文件。
示例:
copy source.txt dest.txt :: 复制文件
copy /y source.txt dest.txt :: 覆盖时不提示(/y) - MOVE: 移动文件或重命名。
示例:
move old.txt new.txt :: 重命名
move file.txt folder\ :: 移动文件到文件夹 - TYPE: 显示文本文件内容。
示例:
type file.txt - FIND: 在文件中搜索字符串。
示例:
find “error” log.txt :: 在log.txt中查找包含"error"的行 - TITLE: 设置命令提示窗口的标题。
示例:
title 我的批处理脚本 - COLOR: 设置控制台前景和背景颜色。
示例:
color 0A :: 背景黑色(0),前景绿色(A) - CLS: 清屏。
- PUSHD 和 POPD: 保存当前目录然后更改,之后可以恢复。
示例:
pushd “C:\Program Files”
… 在这里操作 …
popd :: 回到之前的目录 - ERRORLEVEL: 上一条命令的退出代码(通常0表示成功,非0表示错误)。但通常用%errorlevel%访问,或用if errorlevel。
示例:
somecommand.exe
if %errorlevel% neq 0 echo 命令执行失败! - SHIFT: 移动批处理参数的位置(%0, %1, %2…),使得%1获取原%2的值,以此类推。
示例: 用于处理不定数量的参数。 - ASSOC: 显示或修改文件扩展名关联。
- FTYPE: 显示或修改文件类型关联。
注意:以上只是常用命令,还有很多其他命令。每个命令都有更多参数,可以通过命令 /?
来查看帮助(例如:for /?
)。
下面是一个综合示例脚本(example.bat):
@echo off
REM 示例批处理脚本
title 示例批处理
color 0A
echo 当前日期和时间:
date /t
time /t
set /p username=请输入你的名字:
echo 你好, %username%!
if exist "test.txt" (
echo test.txt文件已存在,将删除它。
del test.txt
) else (
echo test.txt不存在。
)
echo 创建test.txt并写入内容...
echo 这是由批处理脚本创建的文件>test.txt
echo 添加一行内容>>test.txt
echo 文件内容如下:
type test.txt
echo 按任意键退出...
pause >nul
exit
```bash
@echo off
echo hello world
rem pause
set myVar=Hello
echo %myVar%
rem set /p myVar2=请输入:
echo %myVar2%
set /a result=10+20
echo %result%
rem set /p input=请再次输入:
echo %input%
if "%myVar%"=="Hello" echo 相等
if exist c:\Users\Larry\Desktop\run.bat echo 文件存在
if not exist c:\Users\Larry\Desktop\run.bat1 echo 文件不存在
if errorlevel 1 echo 上一个程序退出代码大于等于1
set /a num=5
if %num% GEQ 10 (echo 大于等于10) else (echo 小于10)
if %num% LEQ 10 (echo 大于等于10) else (echo 小于10)
for %%i in (1,2,3) do echo %%i
for /f "tokens=*" %%a in (C:\Users\Larry\Desktop\API_Service_IP.txt) do echo %%a
for /f "tokens=1,2 delims=," %%a in (C:\Users\Larry\Desktop\API_Service_IP.txt) do echo %%a and %%b
for /f "tokens=1,2 delims=," %%a in ("aa,bb,cc") do echo %%a and %%b
goto :mylabel
echo 开始跳转
:mylabel
echo 跳转到此处
call C:\Users\Larry\Desktop\run_2.bat
call:mylabel2
echo call调转处
:mylabel2
echo mylabel2处
rem exit /b
rem start notepad.exe
rem start "" "d:\file_upload_postman.txt"
cd \
cd "c:\Program Files"
cd c:\Users\Larry\Desktop
mkdir d:\aaabbb
rmdir /s /q d:\aaabbb
del c:\users\larry\desktop\delete.txt
del /q /f c:\users\larry\desktop\delete.txt
copy c:\users\larry\desktop\run_2.bat c:\users\larry\desktop\run_3.bat
copy /y c:\users\larry\desktop\run_2.bat c:\users\larry\desktop\run_3.bat
move c:\users\larry\desktop\run_3.bat c:\users\larry\desktop\run_4.bat
move c:\users\larry\desktop\run_4.bat c:\users\larry\desktop\
type c:\users\larry\desktop\run_2.bat
find "第二" c:\users\larry\desktop\run_4.bat
title 我的批处理脚本
color 0A
rem cls
pushd "C:\Program Files"
popd
if %errorlevel% neq 0 echo 失败
echo %errorlevel%
shift /2
date /t
time /t
rem date
rem time
echo 示例:
if exist "test.txt" (
echo test.txt文件已存在,将删除它。
del test.txt
) else (
echo test.txt不存在。
)
timeout /t 3
ping 127.0.0.1 -n 3
dir | find "txt"