# dos-note **Repository Path**: hortonwei/dos-note ## Basic Information - **Project Name**: dos-note - **Description**: dos命令学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-02-04 - **Last Updated**: 2023-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #Dos | CMD | 批处理命令学习 1. 终端输出文本--@echo ```batch ::echo off 关闭回显(只显示命令执行的结果,不显示执行的命令) :: @ 不显示@后面的命令 @echo off echo "hello world" ::暂停,不然会一闪而过 pause ``` 2. 把文本写入文件--重定向符>> ```batch @echo off :: >> 一直追加写入 echo "hello world" >> log.txt :: > 覆盖原有文本写入 echo "how are you?" > data.txt pause ``` 3. 设置窗口标题--title ```batch @echo off title batch windows pause ``` 4. 设置窗口背景颜色和字体颜色--color 输入命令color /?,可以看到这个命令的介绍和参数帮助 ```batch :: 设置字体颜色为绿色 color 2 :: 设置黑色背景红色字体 color 04 pause ``` 5. 跳转命令--goto 3,4没有输出到屏幕上,说明代码中的echo 3和echo 4没有执行到 也就是说在goto last和:last之间的语句被跳过去了。 ```batch @echo off echo 1 echo 2 goto last echo 3 echo 4 :last pause ``` 6. 查找文件内容--find ```batch 例1 find "abc" d:\abc.txt 在abc.txt中查找字符串abc的行。 例2 /i 搜索字符串时忽略大小写 find /i "abc" d:\abc.txt 参数/i代表的是“Ignore”(忽略),也就是忽略大小写。通过/i 参数可以不区分要查找的字符串“abc”的大小写 例3 /n 显示行号 find /n "abc" d:\abc.txt 参数/n代表英语单词“Number”(号码).。通过/n参数我们可以查找到字符串"abc"所在的行号 例4 /c 仅显示包含字符串的行数 find /c "abc" d:\abc.txt 参数/c是英语单词“Count”(计数)的缩写。通过/c参数我们可以统计包含"abc"字符串的行数 ``` 7. 获取文件内容--type ```batch type log.txt ``` 8. 启动应用程序--start ```batch ::启动记事本 start notepad ::最小化窗口启动 start /min notepad ::启动postman; 第一个双引号里面填窗口标题栏中显示的标题,可不填 start "" "C:\Users\Administrator\AppData\Local\Postman\Postman.exe" ``` 9. 调用程序--call call命令用来从一个批处理脚本中调用另一个批处理脚本 ```batch call test1.bat ``` 10. 变量引导符--% 可以获取变量值 ```batch @echo off set num=10 echo %num% pause ``` 11. 管道符-- | 作用:把左边的命令输出传递给右边命令作为输入 ```batch ::找出D盘根目录下所有的txt文件 @echo off dir d:\ | find ".txt" pause ``` 12. 组合语句命令连接符-- & && || & 前面命令执行后接着执行后面的命令。 && 前面命令执行成功了才执行后面的命令。 || 前面命令执行失败的时候才执行后面的命令。 ```batch @echo off dir d:\ && dir y:\ dir y:\ || dir d:\ pause ``` 补充一下 如何判定命令是否失败了,很多时候并不是靠自己的主观判断和输出提示来判断的,而是去检测 ErrorLevel这个变量的值 如果是 0 表示成功,非0 表示失败; 可以 用 echo %ERRORLEVEL% 来查看 上一条命令是否执行失败 13. for循环 for /L %%变量 in (起始值,每次增值,结束时的比较值) do 命令 (上面L也可用小写,主要为了视觉上不与数字1混淆而没用小写) (起始值,每次增值,结束时的比较值)相当于一个等差数字序列,从“起始值”的数字开始,每次增加多少(也可设定为负数)为“每次增值”,并与“结束时的比较值”比较,超出则退出for循环(也不执行本轮后面的do 命令) 例如 (1,1,3) 将产生序列 (1 2 3);(1,2,9)将产生序列(1 3 5 7 9);(5,-1,1) 将产生序列 (5 4 3 2 1);(1,3,18)将产生序列(1 7 10 13 16) ```batch @echo off ::在D盘建立aa1 ~ aa5五个文件夹 for /L %%i in (1,1,5) do md d:\aa%%i pause ``` ```batch @echo off rem 删除C盘中所有*.chk的文件 for /r c:\ %%h in (*.chk) do del /q %%h pause ``` ```batch @echo off rem 显示d:盘中所有文件名为file1和file2的列表 for /r d:\ %%h in (file1,file2) do if exist %%h echo %%h pause ``` ```batch @echo off rem 读取d:\abc.txt文本内容 for /f %%i in (d:\abc.txt) do echo %%i pause ``` ```batch @echo off for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c pause ``` 先从引号内的东西讲起,很多新手对这些难以理解,因为 for /? 翻译的简直是一塌糊涂. skip= tokens= delims= 这三项是用的最多的,根据需要.可以不用,可以一起使用,也可以只使用一个或两个. 但是不管使用几个都要用引号将它们扩起来.当然不使用时,自然就不需要引号了. skip= for循环文本内容是以行为单位,从上至下进行的,skip=1意识就是跳过文本的第一行,即不循环第一行 那么skip=2 自然就是跳过前两行了,依次类推......... delims= 先讲这句 delims=后面的字符的意识是,将文本每一行的内容以delims=后面的字符分割成若干列. 假设a.txt某一行的内容是 111,222.333 444/555