cmd基本使用方法和命令总结

发布于 2023-05-09 153 次阅读


注释命令
::
rem

1-cmd:获取当前路径:
set cur_path=%cd%
echo %cur_path%

2-cmd:设置cmd窗口标题
title name

3-cmd:写数据到当前目录下的文件
echo %time% > %cd%\record.txt
echo start >> %cd%\record

备注:如果目录有空格,需要将%cd%用引号括起来 例如:"%cd%"

4-cmd:计数
set count = 1
set /a count = count + 1
echo %count%

5-cmd:loop循环使用
:loop
echo time > test.txt
if %j%== %n% goto end
goto loop
:end

6-cmd:算数运算
set count = 10
set /a %count% /2 [除法,结果是5]
set /a %count% /%2 [取余,结果是0]

备注:cmd脚本中取余要用2个% , 例如[set /a f = %count% %% 2]

7-cmd:设置时间等待
ping 127.0.0.1 > nul

8-cmd:取日期
set datetime = %date:~0,10% //从第0位开始,取10位字符
set year = %date:~0,4%【2016】
set month = %date:~5,2%【11】
set day = %date:~8,2%【02】
echo %time%【15:14:08.98】

for /f "tokens=1-3 delims=/" %%a in ('date /t') do (set mydate=%%a-%%b-%%c)
说明:取前123个参数,使用“/” 分割, 必须使用单引号, %%a 是显示申明, %%b %%c 是隐式声明的参数,必须是连续的字符

9-cmd:for循环的使用:
计数
for /l %%a in (1,1,5) do echo %%a

读文件和目录
for %%i in (a.txt) do echo %%i //没有加参数只会显示a.txt这个名字,不会显示内容
for /f %%i in (a.txt) do echo %%i //加了/f这个参数会读出a.txt文件的内容
以上是以文件的一行作为一个%%i输出的

如果需要将一行分解成更小的内容处理,需要配合使用tokens 和 delims 了
例如:
for /f "delims= " %%i in (a.txt) do echo %%i //以空格分隔,%%i显示分隔后的第一个元素
for /f "tokens=2 delims= " in (a.txt) do echo %%i //以空格分隔,%%i显示分隔后的第二个元素
注意:tokens后面必须有个空格,而且tokens参数必须在delims的前面

备注:tokens支持通配符
tokens=2-3
tokens=2,3
tokens=* //全部

skip参数是忽略文件前n行
eol参数是指定当一行以什么符号开始就忽略它
例如:
for /f "skip=1 tokens=* delims= " in (a.txt) do echo %%i //tokens必须等于* ,不然只会去每行的第一个参数

10-cmd:查找当前文件夹中指定类型文件中的异常关键字
列出指定类型文件的命令
dir /b "*.txt" // /b参数可以列出完整的路径

for /f "tokens=*" %%f in ('dir /b "*.txt"') do (
findstr /n /c: "CRASH" /c:"ANR" "%%f" && (echo %%f中有异常>>error.txt) || (echo %%f中没有有异常>>error.txt)
)
说明:必须使用单引号, /n 表示显示行号 /c:搜索异常的关键字

还有一种可以处理多种类型的文件
for %%f in (*.txt *.log) do (
...
)

11-cmd: & 和&&区别
echo gao & echo qiang
&:不管命令是否执行成功,一直执行完毕
&&:执行多条命令,当前出错时就停止

12-cmd: | 命令
管道命令,前一个命令的结果作为下个命令的参数
例如:
netstat -n -p tcp | find "3389"

13-cmd:关于 1>nul 和 2>nul
1>nul :不显示命令运行的正确提示
例如:echo gao 1>nul //结果不会有任何提示

2>nul :不显示错误的提示
例如: gao 2>nul //结果不会有错误提示

14-cmd: 关于~符号的应用
set s ="gaopinqiang"
echo %s:~3,10% //从第三个字符开始取,取10个字符
可以取变量的指定内容,类似于Python中的分片

截取最后5个字符
echo %s:~-5%

15-cmd: for 循环中使用set失效问题(需要设置 变量延迟)
问题背景:在for循环中取时间变量,每次取的时间都一样,分析后发现是因为set 为生效

例如:
set num=0 && echo %num% // 会提示ECHO处于打开状态,因为cmd预编译机制并未对num赋值,所以echo命令结果就是echo处于打开

setlocal EnableDelayedExpansion 设置变量延迟 可以解决该问题
例如:
setlocal EnableDelayedExpansion
set num=0 && echo !num!
注意:使用变量延迟的时候需要把%num% 变化为 !num!

这样for中就可以使用set 命令设置变量了,不会导致不生效问题