鸟语天空
批处理命令
post by:追风剑情 2016-8-18 15:09

当前目录%cd%与%~dp0

echo off
echo path is %cd%
echo path is %~dp0
pause
运行


11111111.png

开启延迟环境变量扩展
setlocal enabledelayedexpansion

示例1

@echo off
set a=4
set a=5&echo %a%
pause 

输出 4
原理:批处理会先给%a%赋值,再执行a=5

示例2

@echo off
rem 开启延迟环境变量扩展
setlocal enabledelayedexpansion
set a=4
set a=5&echo !a! 
pause

输出 5
原理:批处理会先执行a=5,再给!a!赋值。注意这里的写法是感叹号。

 

输入数据
set /p

示例1

@echo off
rem 接收用户输入的数据并赋值给data变量
set /p data=请输入数据:
echo 你输入的数据为:%data%
pause


跳转命令
goto

示例1

@echo off
rem 显示菜单
:MENU
echo 菜单
echo 1.选项一
echo 2.选项二
echo 3.退出

rem set /p 接收用户输入的数据并赋值给menu变量
set /p menu=请输入选项:
echo 你选择:%menu%

rem /i 表示比较时不区分大小写
if /i "%menu%" == "1" goto ITEM1

rem if else需要用小括号对代码分组
if /i "%menu%" == "2" (goto ITEM2) else (goto EXIT)

:ITEM1
echo 执行选项一操作...
goto MENU

:ITEM2
echo 执行选项二操作...
goto MENU

:EXIT
pause

删除缓存目录
rmdir
选项:
/s 删除目录下所有文件
/q 不提示

@echo off

rem 设置dos窗口标题
@title 批处理——删除三国战神缓存目录

rem 显示操作系统版本信息
echo 当前操作系统版本信息
ver
wmic os get Caption

set cacheDir=C:\Users\Administrator\AppData\LocalLow\zwwx

if exist %cacheDir% (
   echo 发现缓存目录 %cacheDir%
   rmdir /q /s %cacheDir%
   echo 缓存目录已删除!
) else (
   echo 没缓存目录
)

pause

输入:
当前操作系统版本信息
Microsoft Windows [版本 6.1.7601]
Caption
Microsoft Windows 7 Ultimate
发现缓存目录 C:\Users\Administrator\AppData\LocalLow\zwwx
缓存目录已删除!
请按任意键继续. . .

复制目录
xcopy
选项:
/E 复制目录及下面的所有东西
/Y 覆盖文件时不进行提示

@echo off
set srouce=D:\mydir
set src=E:\dir
rem 预先创建目标目录,避免提示。
MD %src%
rem 复制目录及下面的所有东西,覆盖目标文件时不进行提示。
XCOPY %srouce% %src% /E/Y
pause


跳转命令
call

@echo off

echo test1
call :Label1
echo test2
pause

:Label1
echo 111


输出
test1
111
test2
请按任意键继续. . .


获取时间

echo off
echo 默认时间格式
echo %date%
echo %time%
echo ---
echo 自定义时间格式(年-月-日 时:分:秒 星期)
::%date:~x,y%及%time:~x,y%   说明: x表示位置,y表示位数
echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2% 星期%DATE:~-1%
pause


111.png


for命令


@echo off 
rem 可输入for /? 来查看帮助信息

rem /r 递归搜索C盘下的所有exe文件,并输出文件路径
rem 如果不写c:,则对当前目录进行搜索
for /r c: %%i in (*.exe) do @echo %%i

rem /d 只能搜索当前目录下的目录
for /d %%i in (*) do @echo %%i

rem /l 迭代数值范围
rem 相当于for(int i=1; i<=5; i+=1)
for /l %%i in (1,1,5) do @echo %%i

rem 相当于for(int i=5; i>=1; i-=1)
for /l %%i in (5,-1,1) do @echo %%i

rem /f 逐行读取文件a.txt中的内容并输出
for /f %%i in (a.txt) do echo %%i

rem 逐行读取文件a.txt中的内容并输出每行中以空格分割的第1个元素
for /f "delims= " %%i in (a.txt) do echo %%i

rem 逐行读取文件a.txt中的内容并输出每行中以空格分割的第2个和第3个元素
rem %%i代表第2个元素,%%j代表第3个元素(必须按字母顺序)
rem tokens还可以用通配符,例如tokens=*或tokens=2,*可tokens=2-10
for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j

rem skip=2代表忽略文件的前两行
for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i

rem eol用来指定当某行以什么符号开始时就忽略它
rem 当某行以#字符开始时,则被忽略
for /f "eol=# tokens=*" %%i in (a.txt) do echo %%i

rem 如果路径有空格需要用双引号引起并加上usebackq关键字
for /f "usebackq" %%a in ("C:\Program Files\a.txt") do echo %%a

rem 只读取第一行文件内容并把值赋给test
for /f "delims=" %%i in (123.txt) do (set test=%%i)&(goto :next)
:next
echo %test%

rem 遍历当前目录下的所有文件,并把文件名输出到List.txt中
dir *.* /b>List.txt
pause


遍历目录下的特定文件


@echo off&setlocal enabledelayedexpansion
@set p1=D:\照片\2017-02-26
@set p2=D:\照片\2017-02-19
@set p3=D:\照片\2017-01-20
@set p=%p1% %p2% %p3%
rem 遍历多个指定目录
for %%a in (%p%) do (
	if exist %%a (
		rem 遍历指定目录下的所有*.jpg文件
		for /f "delims=" %%b in ('dir %%a\*.jpg /b') do (
			echo %%a\%%b
		)
	)
)
pause



将内容保存到文件


@echo off
rem >>代表追加内容到文件尾
rem echo hello world>d:\test.txt

rem 前有数字时,数字表示已经打开的文件或设备句柄,
rem 联合表示将本来输出到某个文件或设备的内容重定向,而非将缺省的标准输出重定向。
rem 0——stdin,标准输入设备,即键盘
rem 1——stdout,标准输出设备,即屏幕
rem 2——stderr,标准错误设备,即屏幕
rem 想要把某些特殊数字输入到文件需要在前面加转义符^
echo ^2>test.txt
@pause


顺序执行多条命令(&&,||,|)


@echo off
rem &&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
rem echo a && echo b && echo c

rem 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
rem echo a || echo b || echo c

rem 管道命令,前一个命令的执行结果作为后一个命令的输入参数
echo 123 | findstr "23"
@pause



接收启动命令参数


@echo off
rem 打印第1个参数
echo %1

rem 打印第2个参数
echo %2

rem 去掉参数两边的引号
echo %~2
rem @pause>nul这样写就不会显示 请按任意键继续...
@pause


1111.png


if语句


@echo off
rem 如果目录dir不存在,则创建。
if not exist dir md dir

rem 如果输入的第1个参数为a,则打印ok
rem if "%1"=="a" echo ok

rem 等于(equ)、不等于(neq)、小于(lss)、小于或等于(leq)
rem 大于(gtr)、大于或等于(geq)
rem 2>1
if 2 gtr 1 echo GTR

rem errorlevel用来检测上一个dos命令是否执行成功
rem 环境变量errorlevel的初始值为0,
rem 当一些命令执行不成功,就会返回一个数值,如:1 ,2 等
if errorlevel 0 (
  echo 命令执行成功!
) else (
  echo 命令执行出错!
)

rem 检查某个变量是否已定义
if defined str1 echo str1已被定义
@pause



goto :eof


@echo off
call :label1
echo 这里会执行
pause

rem 这里的goto :eof的作用是退出批处理
goto :eof
echo 这里不会执行

:label1
echo 执行labe1
rem 这里的goto :eof的作用是结束label1的执行
goto :eof
echo 这里不会执行


字符串处理

@echo off
setlocal enabledelayedexpansion
rem 字符串处理参见 https://www.cnblogs.com/mq0036/p/3429821.html
set dir=D:\Test
for /r %dir% %%i in (*.obj) do (
rem 必须要先开启延迟变量,否则感号号括起的变量会被当成字符串处理
set s=%%i
rem 在循环体内必须用感叹号把变量括起
rem 输出时去掉路径中的文件后缀
echo !s:~0,-4!
)
pause 

1111.png

@echo off
setlocal enabledelayedexpansion
set /p folder=请输入目录名:
set dir=.\%folder%
for /r %dir% %%i in (*.obj) do (
set s=%%i
rem 去掉父路径
set s=!s:%cd%\=!
rem 去掉文件后缀
set p=!s:~0,-4!
echo !p!
)
pause 
1111.png

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容