DOS命令 基础
-
echo
echo "hello world"
实例:
@echo off echo hello world pause
@echo off
关闭盘符- echo 打印输出语句
- pause 不立刻关闭终端
-
算术运算
* / % + -
set /a 1+2
实例:
@echo off set /a var = 1 + 2 echo %var% pause
set /a
算术运算echo %var%
输出var变量的值 -
重定向
> >> < <<
我只知道
>
>>
是写入文件实例:
@echo off echo hh > a.txt pause
echo hh > a.txt
把字符串hh
写入a.txt文件(覆盖)>>
表示追加 -
多命令运算
&& ||
&&
命令与运算 符号左边执行成功才会执行符号右边的||
命令或运算 符号左边执行成功不会执行符号右边的 左边未执行成功再执行符号右边的 -
管道符号
|
a命令
|b命令
a命令的输出作为b命令的输入
实例:
dir | find ".txt"
-
基本命令格式
/?
/help
net user /help net user /?
-
参数传递
%
举例:
@echo off echo %1 echo %2 pause
在cmd终端输入:
1.bat hello world
会输出
hello
world
-
注释
rem
举例:
@echo off rem hello world test echo hello world pause
-
设置cmd窗口颜色
color
设置标题title
举例:
color /? color 0A
效果维持在关闭命令窗口期间
title /? title "hello world"
-
时间
date
&&time
举例:
date /? date /T
date /T
输出当前时间周日 2022/12/25
time /? time /T
-
if-else
实例:
@echo off rem 演示if-else结构 判断字符串是否为规定的字符串 set str=hello if %str%==hello (echo ok) else (echo no) pause>nul
pause>nul
不显示按任意键进行....
-
exists
判断文件存在实例:
@echo off if exist D:\code\dos\1.bat (echo ok) else (echo no) pause>nul
if-else
要放在一行 -
del
删除文件实例:
@echo off if exist D:\code\dos\a.txt ( echo file is find! del D:\code\dos\a.txt ) else ( echo file not find! ) pause>nul
-
for
循环-
遍历文件夹
/d
for /d %%变量 in (路径/*) do
实例:
@echo off for /d %%a in (*) do if %%a==test1 rd %%a for /d %%a in (*) do echo %%a pause>nul
/d
表示只遍历文件夹,%%a
表示a变量,*
表示当前目录下的所有目录rd
就是rmdir
删除文件夹 -
遍历目录与目录下的文件
for /r "路径" %%变量 in (匹配规则) do 操作
实例:
@echo off for /r "D:\code\dos" %%v in (*.py) do echo %%v echo 删除 所有 *.py文件 for /r "D:\code\dos" %%v in (*.py) do del %%v pause>nul
-
遍历数字
for /L %%变量 in (开始,步长,结束) do 操作
实例:
@echo off for /L %%v in (1,1,20) do ping %1.%%v pause>nul
/L
表示遍历数字%1
表示输入的第一个参数在控制台终端输入
1.bat 192.168.0
可以实现自动化测试网络连接 -
遍历文件内容
for /F %%变量 in (文件名) do 操作
@echo off for /f %%v in (1.bat) do echo %%v pause>nul
-
-
start
启动cmd窗口start /B 1.bat
不在新窗口启动 -
call
调用其他bat文件@echo off echo %1 echo %2 net user %1 %2 /add call 2.bat pause
call 2.bat
调用2.bat文件 -
任务列表查看命令
tasklist
该工具显示在本地或远程机器上当前运行的进程列表
-
任务关闭命令
taskkill
使用改工具按照进程id(pid)或映像名称终止任务
-
tree
以图形显示驱动或路径的文件夹结构
举例:
tree /F /A
/F
显示每个文件夹中文件的名称/A
使用ASSII字符,而不是扩展字符 -
shutdown
关机shutdown /i
打开GUI可视化界面 执行远程主机的关机操作 -
at
定时任务
at 22:00 C:\abc.exe
-
set
设置环境变量
-
dir
显示目录中的文件和子目录列表
dir /AH
查看隐藏目录 -
mkdir
||md
||rmdir
||rd
创建目录与删除目录
举例:
删除非空目录
rd /S /Q D:\code\dos
/S
删除非空目录/Q
静默删除 -
cd
切换目录
cd /d D:\test
\d
可跨磁盘切换 -
ren
目录重命名
ren D:\code\dos\test1 test02
把test1文件夹重命名为test2文件夹
-
copy
目录复制
copy D:\code\dos\test1 D:\code\dos\test2
-
del
文件删除
del D:\code\dos\test1\*.txt
删除该目录所有txt文件
-
move
文件剪切
move 1.txt 2.txt
重命名1.txt为2.txt
-
目录重复新建
@echo off :loop md test cd test goto loop pause>nul exit
-
交互式操作
@echo off echo 1.a echo 2.b echo 3.c echo 4.d :first echo enter your option: rem /p opt , /p就是把标准输入当中获取对应的值保存到opt中 set /p opt= if %opt%==1 goto one if %opt%==2 goto two if %opt%==3 goto three if %opt%==4 goto four echo invalid option goto first :one echo your choice one pause>nul exit :two echo your choice two pause>nul exit :three echo your choice three pause>nul exit :four echo your choice four pause>nul exit pause>nul
-
at
计划执行
被弃用
-
schtasks
计划执行``SCHTASKS /Create /TN calc /TR C:\windows\system32\calc.exe /SC DAILY /ST 9:00`
SCHTASKS /Create /TN test /TR D:\code\dos\first.bat /SC weekly /ST 20:20
字符串截取
-
获取字符在字符串中首次出现的位置
@echo off ::启用命令扩展,参加setlocal /?命令 Setlocal ENABLEDELAYEDEXPANSION ::目标字符串 set str1=This is a test string ::待查找字符(区分大小写) set ch1=t ::复制字符串 set str=%str1% ::比较首字符是否为要求的字符,如果是则跳出循环 :next if not "%str%"=="" ( set /a num+=1 if "!str:~0,1!"=="%ch1%" goto last set "str=%str:~1%" goto next ) ::没有找到字符时,将num置零 set /a num=0 :last echo 字符'%ch1%'在字符串"%str1%"中的首次出现位置为%num% echo 输出完毕,按任意键退出&&pause>nul&&exit
-
创建字符串
@echo off :: This program just displays Hello World set message=Hello World echo %message%
-
创建空字符和检查空字符串
@echo off SET a= SET b=Hello if [%a%]==[] echo "String A is empty" if [%b%]==[] echo "String B is empty "
-
字符串连接
@echo off SET a=Hello SET b=World SET c=%a% and %b% echo %c% pause
-
字符串字符串转整数
echo off set var=13145 set /A var=%var% + 5 echo %var%
使用
set
变量设置为字符串的变量后,可以使用set
变量的/A
开关转换为整数。以下示例显示了如何完成此操作。 //更多请阅读:https://www.yiibai.com/batch_script/batch_script_toint.html -
左字符串 (字符串截取)
@echo off set str=Helloworld echo %str% set str=%str:~0,5% echo %str%
关于上述程序的键是
~0,5
用于指定需要显示的字符。 在这示例中,应该显示字符0
到5
。 -
中字符串 (字符串截取)
@echo off set str=Helloworld echo %str% set str=%str:~5,10% echo %str%
于上述程序的键是
~5,10
用于指定需要显示的字符。 在这个示例中,要显示字符5
到10
。 -
删除字符串
@echo off set str=Batch scripts is easy. It is really easy. echo %str% set str=%str:is=% echo %str%
关于上述程序是要注意的是,
'is'
这个词是使用'stringtoberemoved'=
命令从字符串中删除。 -
删除两端 (字符串截取)
@echo off set str=Batch scripts is easy. It is really easy echo %str% set str=%str:~1,-1% echo %str%
关于上述程序中,
~1,-1
用于删除字符串的第一个和最后一个字符。 -
删除所有空格 (字符串截取)
@echo off set str=This string has a lot of spaces echo %str% set str=%str:=% echo %str%
关于上述程序的关键是,
:=
操作符用于从字符串中删除所有空格。 -
替换字符 (字符串截取)
@echo off set str=This message needs changed. echo %str% set str=%str:needs=has% echo %str%
通过语句
str=%str:needs=has%
将字符串'has'
替换为'needs'
-
右字符串 (字符串截取)
echo off set str=This message needs changed. echo %str% set str=%str:~-8% echo %str%
字符串的右侧是通过使用
~-
字符来提取操作符。
txt文件内容操作
歌曲列表.txt
内容:
1、饶天亮-玫瑰爱人.wma
2、高一首-我不愿错过.mp3
3、黃凱芹-傷感的戀人.MP3
4、黄灿-黄玫瑰.lrc
5、黎姿-如此这般的爱情故事.mp3
-
显示全部内容
@echo off for /f %%i in (歌曲列表.txt) do echo %%i pause>nul
-
默认提取第一列
@echo off for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i pause>nul
"delims=、"表示定义顿号“、”为分隔符,并用该分隔符“、”切分文本字符串。字符串就是“歌曲列表.txt”里的内容,也就是文件里的文字和标点符号。
该顿号是原文中就有的。除了顿号“、”,原文中还有减号“-”和点号“.”,因此你也可以用它们来做分隔符。 -
用减号“-”做分隔符
@echo off for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i pause>nul
因为,当减号“-”被用做分隔符时,每行内容被减号“-”分隔成前后两半,默认只显示前半部分,而后半部分连同分隔符减号“-”都被忽略(省略)了。
-
用点号“.”做分隔符
@echo off for /f "delims=." %%i in (歌曲列表.txt) do echo %%i pause>nul
默认情况下,单纯使用delims而不用tokens时,只显示第一个分隔符前的内容,第一个分隔符和第一个分隔符后面的内容将被忽略。
-
定义多个分隔符
@echo off for /f "delims=、-." %%i in (歌曲列表.txt) do echo %%i pause>nul
原因是,当定义顿号“、”、减号“-”和点号“.”三个标点符号为分隔符后,原文被分隔成四个部分。
如第二行“1、饶天亮-玫瑰爱人.wma”将被分隔成“1”、“饶天亮”、“玫瑰爱人”和“wma”四个部分。
从第一行到最后一行,每行的每个部分对应下来相当于一个竖列。因此,原文就有“序号”、“歌手名”、“歌曲名”、“后缀名”四列。
一般情况下,只读取第一列的内容。后面的内容需要用tokens选项提取。 -
提取单列
@echo off for /f "tokens=2 delims=、." %%i in (歌曲列表.txt) do echo %%i pause>nul
用delims定义顿号“、”和点号“.”作为分隔符,将原文分成三部分。
如第六行“5、黎姿-如此这般的爱情故事.mp3”被分割成:
第一部分(第一列):5
第二部分(第二列):黎姿-如此这般的爱情故事
第三部分(第三列):mp3
“tokens=2”表示用tokens提取第二列的字符串,即“黎姿-如此这般的爱情故事”。
没有被tokens定义提取的第一列和第三列将被忽略。 -
提取多列
@echo off for /f "tokens=1,3delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j pause>nul
“delims=、-.”表示定义顿号、减号和点号为分隔符。
“tokens=1,3”表示只提取第一列和第三列。
“%%i %%j”对应于“token”后面的列数。有多少列就要有多少个输出变量,并且各变量中的字母存在先后顺序。 -
忽略分隔符
@echo off for /f "tokens=1,2-4delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j %%k %%l pause>nul
默认情况下,用做分隔符的标点符号将被忽略。
“tokens=1,2-4”中的“2-4”表示第二至第四列。