1.基础命令
使用help命令查看结果集 结果集
1. echo 和 @
回显命令
@
echo off
@echo off
echo on
echo
echo .
bash使用\换命令行 bat使用^换命令行
@echo %i
2. errorlevel
echo %errorlevel%
每个命令运行结束,可以用这个命令行格式查看返回码;默认值为0,一般命令执行出错会设errorlevel为非0值
重置错误码输入 cd .
3. dir
显示文件夹内容
dir
dir /a
dir /a:d
dir /a:-d
dir /b/p
dir *.exe /s
:后跟着属性 D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 I 无内容索引文件
L 重新分析点 O 脱机文件
- 表示“否”的前缀
4. cd
cd
cd /
5. md/mkdir
创建目录
md d:\a\b\c
6. rd/rmdir
删除目录
rd abc
rd /s/q d:\temp
/S 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q 安静模式,带 /S 删除目录树时不要求确认
7. del
删除文件
del d:\a.txt
del /q/a/f d:\temp*.*
del /q/a/f/s d:\temp*.*
/P 删除每一个文件之前提示确认。
/F 强制删除只读文件。
/S 删除所有子目录中的指定的文件。
/Q 安静模式。删除全局通配符时,不要求确认
/A 根据属性选择要删除的文件
8. ren
重命名命令
ren d:\temp tmp
9. cls
清屏
10. type
显示文件内容
11. copy
拷贝文件
copy a.txt d:\test.bak
copy con a.txt
`con代表屏幕,prn代表打印机,nul代表空设备
copy nul a.txt
copy 1.txt+2.txt 3.txt
copy a.txt +
12. title
设置cmd窗口的标题
title 新标题
13. ver
显示系统版本
14. label 和 vol
设置卷标
vol
label
15.
pause 就是暂停命令,执行时会在命令行窗口显示“请按任意键继续. . .” 并等待你按键。 pause > nul的作用是同样的,区别是不打印“请按任意键继续. . .” ,nul相当于空文件,把这些文字隐去了。
16. rem 和 ::
注释命令
注释行不执行操作
17. date 和 time
日期和时间
date
date /t
time
time /t
18. goto 和 :
跳转命令
:label
goto label
19. find (外部命令)
查找命令
find "abc" a.txt
find /i “abc” a.txt
find /c "abc" a.txt
20. more (外部命令)
逐屏显示
more a.txt
21. tree
显示目录结构
tree d:
22. &
顺序执行多条命令,而不管命令是否执行成功;和bash不同 bash是;
23. &&
顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
find "ok" a.txt && echo 成功
24. ||
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
find "ok" a.txt || echo 不成功
25. |
管道命令
dir * /s/a | find /c ".exe"
echo Y|copy nul a.txt
type a.txt|more
26. > 和 >> 输出重定向命令
>清除文件中原有的内容后再写入 >>追加内容到文件末尾,而不会清除原有的内容
echo hello world>con
copy a.txt f:\ >nul
copy a.txt f:\ >nul 2>nul
echo ^^W ^> ^W>a.txt
27. <
从文件中获得输入信息,而不是从屏幕上 一般用于 date time label 等需要等待输入的命令
28. %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %* 命令行传递给批处理的参数
%0 批处理文件本身
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数
批参数(%n)的替代已被增强。您可以使用以下语法:
%~1 - 删除引号, 扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH :1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
29. if
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
ELSE 子句必须出现在同一行上的 IF 之后(否则换行有问题 要用换行符^)。
IF EXIST filename. (
del filename.
) ELSE ( `注意空格
echo filename. missing.
)
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于`
if "%1" =="/a" echo 第一个参数是/a
if /i "%1" equ "/a" echo 第一个参数是/a
if exist test.bat echo 存在test.bat文件
30. setlocal(开始本地变量) 和 endlocal(结束本地变量) `参考31.set`
设置”命令扩展名”和”延缓环境变量扩充”
setlocal enableextensions
setlocal disableextensions
setlocal enabledelayedexpansion
setlocal disabledelayedexpansion
endlocal
“命令扩展名”默认为启用
“延缓环境变量扩充”默认为停用
批处理结束系统会自动恢复默认值
可以修改注册表以禁用"命令扩展名" ,详见 cmd /? 。所以用到"命令扩展名" 的程
序,建议在开头和结尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 语句,以确
保程序能在其它系统上正确运行
"延缓环境变量扩充" 主要用于 if 和 for 的符合语句,在 set 的说明里有其实用例程
31. set
设置变量
引用变量可在变量名前后加 % ,即 %变量名%
set
echo %SystemDrive%
set p
set p=aa1bb1aa2bb2
echo %p%
echo %p:~6%
echo %p:~6,3%
echo %p:~0,3%
echo %p:~-2%
echo %p:~0,-2%
echo %p:aa=c%
echo %p:aa=%
echo %p:*bb=c%
set p=%p:*bb=c%
set /a p=39
set /a p=39/10
set /a p=p/10
set /a p=”1&0″
set p=
set /p p=please input:
set /p /a p=please input:
`begin------------------------
注意变量在 if 和 for 的复合语句里是一次性全部替换的,如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p%
)
结果将显示
aaa
aaa
因为在读取 if 语句时已经将所有 %p% 替换为aaa 这里的"替换" ,在 /? 帮助里就是指"扩充" 、"环境变量扩充" ;可以启用”延缓环境变量扩充”,用!来引用变量,即!变量名!
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo !p!
)
ENDLOCAL
结果将显示
aaa
bbb
`end-----------------------------
还有几个动态变量,运行set 看不到;参考set /?
%CD%
%DATE%
%TIME%
%RANDOM%
%ERRORLEVEL%
%CMDEXTVERSION%
%CMDCMDLINE%
可以用echo 命令查看每个变量值,如 echo %time%
注意 %time% 精确到毫秒,在批处理需要延时处理时可以用到
批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令
33. call
批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行,有时有的应用程序用start调用出错的,也可以call调用
34. choice (外部命令)
在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列
@ECHO OFF
:BEGIN
CHOICE /c abc /m "please select"
IF %ERRORLEVEL%==3 GOTO END
IF %ERRORLEVEL%==2 GOTO two
IF %ERRORLEVEL%==1 GOTO one
:one
ECHO 1
GOTO BEGIN
:two
ECHO 2
GOTO BEGIN
:END
ECHO over
35. pushd 和 popd
切换当前目录
@echo off
c: & cd & md mp3
md d:mp4
cd /d d:mp4
pushd c:mp3
popd
36. for
循环命令这个比较复杂,请对照 for /? 来看
for %%i in (c:\ d:\ e:\ f:\) do echo %%i
for %%i in (*.txt) do find "abc" %%i
for /r . %%i in (*.txt) do find "abc" %%i
for /r . %%i in (.) do echo %%~pni
for /r d:\mp3 %%i in (*.mp3) do echo %%i>>d:\mp3.txt
for /l %%i in (2,1,8) do echo %%i
for /f %%i in ('set' ) do echo %%i
for /f "eol=P" %%i in ('set' ) do echo %%i
for /f %%i in (d:\mp3.txt) do echo %%i
for /f "delims=" %%i in (d:\mp3.txt) do echo %%i
for /f "skip=5 tokens=4" %%a in ('dir' ) do echo %%a
for /f "tokens=1,2,3 delims=- " %%a in ('date /t' ) do (
echo %%a
echo %%b
echo %%c
)
对 date /t 的输出结果,每行取1、2、3列
第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列
分隔符指定为 - 和"空格" ,注意 delims=- 后面有个"空格"
其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的
for /f "tokens=2* delims=- " %%a in ('date /t' ) do echo %%b
取第2列给 %%a ,其后的列都给 %%b
37. subst (外部命令)
映射磁盘。
subst z: serverd
subst z: /d
subst
38. xcopy (外部命令)
文件拷贝
xcopy d:\mp3 e:\mp3 /s/e/i/y
39. net
40.
2. for命令的补充
参考教程
1.在cmd窗口中使用,变量名必须用单%引用(即:%variable);在批处理脚本中使用,变量名必须用双%引用(即:%%variable)
2.for、in和do 三个关键字缺一不可
3.for命令的形式变量只能是26个字母中的任意一个
4.字母区分大小写(即就是 %%a 和 %%A 是两个不同的变量名)
2.1 for /l
for /l l是指loop,即循环的意思。完整格式:for /l %variable in (start,step,end) do command [command-parameters]
[1] start指起始值;step指步间距;end指终止值。
[2] start、step和end都只能取整数(正负皆可)。
[3] 步间距step的值不能为0。
[4] 当步间距step的值为正整数时,终止值end不能小于初始值start。
[5] 当步间距step的值为负整数时,终止值end不能大于初始值start。
具体含义:从start开始计数,以step为步长,直至最接近end的那个整数值为止,这之间有多少个数,do后的语句就执行多少次。
当循环次数确定的时候,首选for /l语句,也可使用goto语句但不推荐;
当循环次数不确定的时候,用goto语句将是唯一的选择,因为,这个时候需要用if之类的条件语句来判断何时结束goto跳转。
@echo off
for /l %%i in (1 ,2 ,10 ) do @echo %%i
pause>nul
for /l %%i in (-1 ,-2 ,-10 ) do @echo %%i
pause>nul
2.2 for /d
/d 即 /dictionary,为了处理文件夹相关。完整格式:for /d %variable in (set) do command [command-parameters]
[1] 有通配符。当“元素集合”中包含有通配符 ? 或 * 时,它会匹配文件夹。它仅能匹配当前目录下的第一级文件夹,或是指定目录位置上的一级文件夹,而不能匹配更深路径下的子文件夹。和/r的局限都是:不能处理隐藏属性的文件夹
@echo off
for /d %%i in (f:\test*) do echo %%i
pause>nul
[2] 无通配符。作用和 "for %%i in (元素集合) do 命令语句集合" 这样的语句无任何区别
[3] for /r /d一起使用。(在for有限的4个参数中 只有/r /d可以一起使用);可以认为/r /d是对/d的扩展
所以使用for /r /d的条件是:(1)要对文件夹操作(dir /ad /s /b可以显示不能操作) (2)不处理隐藏属性的文件夹(看下文for /f和dir的结合)
@echo off
for /r /d %%i in (*) do echo %%i
pause>nul
2.3 for /r
较/d可以递归,对文件夹遍历。完整格式:for /r [[drive:]path] %%variable in (set) do command [command-parameters]
[1] 列举“目录”及该目录路径下所有子目录,并把列举出来的目录路径和元素集合中的每一个元素拼接成形如“目录路径\元素”格式的新字符串,然后,对每一条这样的新字符串执行“命令语句集合”中的每一条命令; 特别需要注意的是:当“元素集合”带以点号分隔的通配符 ? 或 * 的时候,把“元素集合”视为文件(不视为文件夹即目录),整条语句的作用是匹配“目录”所指文件夹及其所有子文件夹下匹配的文件;若不以点号分隔,则把“元素集合”视为文件夹(不视为文件);
[2] 当省略掉“目录”时,则默认针对当前目录进行;
[3] 当元素集合中仅仅是一个点号的时候,将只列举目录路径;
@echo off
for /r f:\test %%i in (a b c) do echo %%i
pause
@echo off
for /f %%i in ('dir /ad /b /s' ) do echo %%i
pause>nul
2.4 for /f
本文的目标是:不求最好,但求更好,做最实用的批处理分享。
本文地址:http://www.cnblogs.com/Braveliu/p/5081087.html。
这里是:顺序选择循环的博客,新手学习提升的福地。
2.4.1 解析文本:for /f的基本用法
1 @echo off
2 for /f "delims=" %%i in (test.txt) do echo %%i
3 pause>nul
2.4.2 切分字符:delims=
"delims="等号后加的是字符集,比如以;和?为分割 则"delims=;?"
默认只提取第一节的字符串 关于其他节的提取参考 tokens=
@echo off
for /f "delims=," %%i in (test.txt) do echo %%i
pause>nul
2.4.5 定点提取:tokens=
tokens= 后面一般跟的是数字,如 tokens=2,也可以跟多个;但是每个数字之间用逗号分隔,如 tokens=3,5,8,提取第3、第5和第8节字符串(注意,这里所说的“节”,是由 delims= 这一开关划分的)
如果 tokens= 后面指定了多个数字,如果形式变量为%%i。那么,第一个数字指代的内容用第一个形式变量 %%i 来接收,第二个数字指代的内容用第二个形式变量 %%j 来接收,第三个数字指代的内容用第三个形式变量 %%k 来接收……第N个数字指代的内容用第N个形式变量来接收。其中,形式变量遵循字母的排序,第N个形式变量具体是什么符号,由第一个形式变量来决定:如果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式变量用的是%%x,那么,第二个形式变量就是%%y
tokens=1,2-4 表示提取1 2到4
token=n,* *表示依切分字符,将字符串从左往右切分成紧跟在*之前最大数值所表示的节数之后,字符串的其余部分保持不变,且整体被*所表示的一个变量接收。
@echo off
for /f "delims=, tokens=3,4" %%i in (c.txt) do echo %%i %%j
exit /b 0
@echo off
for /f "delims=, tokens=1,*" %%i in (test3.txt) do echo %%i %%j
pause>nul
@echo off
set num=0
for /f %%i in ('dir /a-d /b *.exe' ) do (
set /a num+=1
echo num 当前的值是 %num%
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test" >nul&&(
echo 存在含有 test 字符串的文本本件
) || echo 不存在含有 test 字符串的文本文件
if exist test.ini (
echo 存在 test.ini 文件
) else echo 不存在 test.ini 文件
pause
2.4.6 跳过无关内容 skip=n;忽略以指定字符开头的行:eol ;等参考网站教程
3.命令行参数
4.创建空文件
1 .cd. > a.txt
2 .copy nul a.txt
3 .type nul > a.txt
4 .echo a 2 > a.txt
5 .fsutil file createnew d:\a.txt 0
6 .echo. > a.txt
5.创建非空文件
1 .echo a > a.txt
2 .type a.txt > b.txt
3 .copy a.txt b.txt
4 .fsutil file createnew d:\a.txt 1
6.检测进程
检测进程
:start
choice /t 5 /d y /n >nul (5 秒执行一次下面的指令)
tasklist|find /i "ngrok.exe" (检查是否存在ngrok.exe进程,如果检测到,下面比较的值为0 ,为0 表示存在。)
if %errorlevel%==0 (
echo "yes"
) else (
echo "No"
start startup.bat (新窗口启动startup.bat脚本)
)
goto start (循环)
7.调用批处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!