chcp 437
chcp 936
一、DOS下的常用批处理命令
① echo 回显控制(在命令提示符或DOS下,每执行一条命令都会显示在屏幕上,这就叫回显)
echo on :: 打开回显
echo off :: 关闭回显
@echo off :: 关闭回显,且连这句都不显示,常用
echo hello world :: echo 还有打印的功能
② cls 清屏命令
③ @ 符号
如某条命令前加@关闭该命令的回显
@cls
@echo hello World
文件控制:
② del
③ copy/move 文件的复制和移动
copy/move 原文件路径/原文件名 新路径
move a.txt c:\xx ::将 当前目录下的a.txt 移动c:\xx目录下
④ ren 文件重命名
例:
:: 将当前目录下的所有文件改为jpg文件
:: * 是通配符,代表任意数量的字符
ren * *.jpg
文件夹控制:
① cd(chdir) 显示或改变当前目录名称
格式:cd [drive:]path
cd
cd.. 返回上级目录
cd\ 返回根目录
cd fullPath
② md(mkdir) 创建文件夹
格式 md [drive:]path
可以嵌套创建文件夹,如 md a\b\c\d
③ rd(rmdir) 删除一个文件夹
格式:rd [/s] [/q] [drive:]path
/s 的意思删除指定目录下的所有文件以及子目录
/q 安静模式,不向用户询问是否删除
比如删除上面建立的文件夹
rd /s /q z:\a
文件和文件夹共同的命令:
① dir 显式目录中文件和子目录列表,详细参数见下图
一些特殊符号:
① 重定向符号 > 与 >>
重定向符号就是传递和覆盖的意思,它所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台,即命令提示符)。
例: tree /f > z:\result.txt :: 把当前目录的树形目录结构打印到 result.txt 文件中
> 与 >> 的区别
> 是完全覆盖以前文件内容
>> 是在以前文件内容后面接着写
② 命令管道符 |
表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,即,就是把它之前的输出作为它之后的输入。
例:
:: 查找qq.exe进程 如找到就结束
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe
③ 组合命令 & 与 && 及 ||
& 顺序执行多条命令,前面命令执行失败了,不影响后边的命令执行
:: 查找电脑 Z盘 Y 盘 以及 C盘下目录和文件
dir z:\ & dir y:\ & dir c:\
&& 顺序执行多条命令,当碰到执行错误的命令则停止执行,如无错则一直执行下去
:: 由于我的电脑没有y盘,故批处理执行到 dir y:\ 出错后就停止
dir z:\ && dir y:\ && dir c:\
|| 顺序执行多条命令,当碰到执行错误的命令才往后执行,如遇到执行正确的命令则停止
:: 大家敲下这代码就不言自明了
dir y:\ || dir z:\ || dir c:\
④ 转义字符 ^ 如 echo ^>
cd "c:\Program Files"
rem 注释符号
:: 注释符号
xcopy 复制文件和目录
find 搜索字符串
findstr
exit 退出命令
⑤ taskkill 结束指定进程
复制代码
taskkill /f /im 映像名
例如 关闭所有 IE 进程
taskkill /f /im iexplore.exe
结合 tasklist 和 taskkill 使用
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe
复制代码
⑥ shutdown 关闭计算机
简介批处理编程结构
一、变量
键入set命令 查看所有已知变量(环境变量、内置系统变量)
批处理变量命名:不区分大小写
set varA =311
变量都是弱类型的(脚本语言嘛 微笑)
区分空格
set varA = "sss"
set varA="ss"
是两个变量
如果需要用局部变量则用
setlocal
set 语句
endlocal
引用变量用 两个 %% 包围 如 %varA%
数学运算
+ 加、-减、*乘、/除、%求模
set /a 数学表达式
如
::total 自加1
set /a total+=1
二、条件语句——if 语句
格式:
if cond (
statement_1
...
statement_n
)
[else(
statement_1
..
statement_n
)]
方括号“[]”的含义为可选
例子
if "%1"=="1" (echo is one) else ( echo is not one)
比较运算符
== 判断相等
equ 判断相等
lss 小于
leq 小于或等于
gtr 大于
geq 大于或等于
三、循环语句——for 循环
基本格式: for iterator do (statements)
①遍历一系列的值
格式 :
for /L %%var in (start, step, end) do (statements) rem var 是单字母变量 如 %%i,如果是多字母变量如 %%aa 会报错
例
@echo off
for /l %%B in (0,1,15) do echo %%B
② 对文件的遍历
格式:
for %%var in (fileSets) do (statements) rem fileSets 文件的集合
例1:
rem 打印 C盘下的txt文件
@echo off
for %%i in (C:\*.txt) do echo %%i
rem 打印 C盘下的txt和 sys 文件
@echo off
for %%i in (C:\*.txt C:\*.sys) do echo %%i
③ 对文件夹的遍历
格式:
for /d %%var in (directorySet) do (statements) rem directorySet 目录的集合
例:
@echo off
for /d %%i in (Z:\) do echo %%i
:: 对 Z:\ 下目录的遍历
@echo off
for /d %%i in (Z:\*) do echo %%i
::多个目录的例子
@echo off
for /d %%i in (%SystemRoot%\* Z:\*) do echo %%i
④ 递归对文件遍历
格式:
for /r [path] %%var in (fileSet) do (statements)
例子
@echo off
for /r C:\ %%i in (*.txt) do echo %%i
⑤ /r 与 /d 结合
::输出 %SystemRoot% 下的所有目录及子目录
@echo off
for /r %SystemRoot% /d %%i in (*) do echo %%i
四、函数——在批处理编程中称过程
① 不带参数的函数
@echo off
echo 调用前
pause
call :sub
::调用子过程
echo 调用后
pause
exit
:sub
echo 子过程调用中
pause
goto :eof
② 带参数的函数
@echo off
set a=5
set b=4
call :add %a% %b%
::调用子过程
echo 两个数的和为%sum%
pause
exit
:add
set /a sum=%1+%2
goto :eof
----------------------------------------------
for循环
/f 遍历文件
for /f "delims=" %%i in ('dir /ad /b ".\"') do @echo %%i 不用这么复杂,dir /ad /b
for /f "skip=1 tokens=1-5或1,2* delims=./" %%a in (a.txt) do @echo %%a %%b %%c
/r 根目录下的文件用for循环
/d
::遍历文件夹中的raw图
for %%a in (.\RawImage\*.raw) do (echo %%a)
::删除除特定目录之外的目录
set reDir="新建文件夹"
for /d %%i in (*) do (
echo %reDir%|findstr /c:"%%i" 1>nul 2>nul &&echo "%%i"符合跳过 ||rd /s/q "%%i"
)
:: *所有目录,*.*所有文件
set reFile="新建文本文档.bat 1_ShadingCalibrationSample.exe 2_ShadingCorrectionSample.exe ShadingCalibrate.dll lsv_param_capture.txt slim_param_capture.txt"
:: *.* 可以用*代替,如果没有/d 默认就是找文件
for %%i in (*.*) do (
echo %reFile%|findstr /c:"%%i" 1>nul 2>nul &&echo "%%i"符合跳过 ||del "%%i"
)
::/l
for /l %%B in (0,1,15) do echo %%B
for %%i in (C:\*.txt) do echo %%i
for /d %%i in (%SystemRoot%\* Z:\*) do echo %%i
for /r C:\ %%i in (*.txt) do echo %%i //效果同 dir /s /b c:\*.txt
for /r %SystemRoot% /d %%i in (*) do echo %%i
----------------------------------------------
----------------------------------------------
::删除文件
del [/s /q] *.suo
::清空文件夹
del /s /q ipch
::删除目录及子目录
rd /s /q ipch
::切换目录
cd ipch
@echo off
cls
move
ren * *.jpg
attrib
cd \
md \a\b\c\d
tree > z:\c_result.txt
xcopy
tasklist | find /i "qq.exe" && taskkill /f /im qq.exe
dir /ah-d /s /b . 查找隐藏文件
> 和 >>区别 echo ^>
* 通配符 表示任意多个字符
? 通配符 表示一个字符
chcp 936 437 cmd中英文切换
----------------------------------------------
----------------------------------------------
编程
setlocal
endlocal
set/a total+=1
set/p touzhu=请输入投注钱数
set/a t = %random%%%6+1
!count!??? goto end
::定位到行
@echo off
findstr和find的区别?查找字符串?
findstr /n .* 歌曲列表.txt>>122.txt ::加行号
set /p m=请输入要定位的行:
findstr /b "%m%" 122.txt
pause
----------------------------------------------
四、函数——在批处理编程中称过程
echo %a:~-5%
set "aa=%aa:中国=中华人民共和国%"
set "aa=%aa%%bb%"
%~d0
echo %%0 = %0
@echo off
reg add HKCU /v try /f>nul
reg delete HKCU /v try /f
if %errorlevel%==0 (echo 删除成功!) else (echo 删除失败!)
pause>nul