批处理命令

作者:追风剑情 发布于:2016-8-18 15:09 分类:批处理

当前目录%cd%与%~dp0

  1. echo off
  2. echo path is %cd%
  3. echo path is %~dp0
  4. pause
运行


11111111.png

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

示例1

  1. @echo off
  2. set a=4
  3. set a=5&echo %a%
  4. pause

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

示例2

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

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

 

输入数据
set /p

示例1

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


跳转命令
goto

示例1

  1. @echo off
  2. rem 显示菜单
  3. :MENU
  4. echo 菜单
  5. echo 1.选项一
  6. echo 2.选项二
  7. echo 3.退出
  8.  
  9. rem set /p 接收用户输入的数据并赋值给menu变量
  10. set /p menu=请输入选项:
  11. echo 你选择:%menu%
  12.  
  13. rem /i 表示比较时不区分大小写
  14. if /i "%menu%" == "1" goto ITEM1
  15.  
  16. rem if else需要用小括号对代码分组
  17. if /i "%menu%" == "2" (goto ITEM2) else (goto EXIT)
  18.  
  19. :ITEM1
  20. echo 执行选项一操作...
  21. goto MENU
  22.  
  23. :ITEM2
  24. echo 执行选项二操作...
  25. goto MENU
  26.  
  27. :EXIT
  28. pause

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

  1. @echo off
  2.  
  3. rem 设置dos窗口标题
  4. @title 批处理——删除三国战神缓存目录
  5.  
  6. rem 显示操作系统版本信息
  7. echo 当前操作系统版本信息
  8. ver
  9. wmic os get Caption
  10.  
  11. set cacheDir=C:\Users\Administrator\AppData\LocalLow\zwwx
  12.  
  13. if exist %cacheDir% (
  14. echo 发现缓存目录 %cacheDir%
  15. rmdir /q /s %cacheDir%
  16. echo 缓存目录已删除!
  17. ) else (
  18. echo 没缓存目录
  19. )
  20.  
  21. pause

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

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

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


跳转命令
call

  1. @echo off
  2.  
  3. echo test1
  4. call :Label1
  5. echo test2
  6. pause
  7.  
  8. :Label1
  9. echo 111


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


获取时间

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


111.png


for命令


  1. @echo off
  2. rem 可输入for /? 来查看帮助信息
  3.  
  4. rem /r 递归搜索C盘下的所有exe文件,并输出文件路径
  5. rem 如果不写c:,则对当前目录进行搜索
  6. for /r c: %%i in (*.exe) do @echo %%i
  7.  
  8. rem /d 只能搜索当前目录下的目录
  9. for /d %%i in (*) do @echo %%i
  10.  
  11. rem /l 迭代数值范围
  12. rem 相当于for(int i=1; i<=5; i+=1)
  13. for /l %%i in (1,1,5) do @echo %%i
  14.  
  15. rem 相当于for(int i=5; i>=1; i-=1)
  16. for /l %%i in (5,-1,1) do @echo %%i
  17.  
  18. rem /f 逐行读取文件a.txt中的内容并输出
  19. for /f %%i in (a.txt) do echo %%i
  20.  
  21. rem 逐行读取文件a.txt中的内容并输出每行中以空格分割的第1个元素
  22. for /f "delims= " %%i in (a.txt) do echo %%i
  23.  
  24. rem 逐行读取文件a.txt中的内容并输出每行中以空格分割的第2个和第3个元素
  25. rem %%i代表第2个元素,%%j代表第3个元素(必须按字母顺序)
  26. rem tokens还可以用通配符,例如tokens=*或tokens=2,*可tokens=2-10
  27. for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j
  28.  
  29. rem skip=2代表忽略文件的前两行
  30. for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i
  31.  
  32. rem eol用来指定当某行以什么符号开始时就忽略它
  33. rem 当某行以#字符开始时,则被忽略
  34. for /f "eol=# tokens=*" %%i in (a.txt) do echo %%i
  35.  
  36. rem 如果路径有空格需要用双引号引起并加上usebackq关键字
  37. for /f "usebackq" %%a in ("C:\Program Files\a.txt") do echo %%a
  38.  
  39. rem 只读取第一行文件内容并把值赋给test
  40. for /f "delims=" %%i in (123.txt) do (set test=%%i)&(goto :next)
  41. :next
  42. echo %test%
  43.  
  44. rem 遍历当前目录下的所有文件,并把文件名输出到List.txt
  45. dir *.* /b>List.txt
  46. pause


遍历目录下的特定文件


  1. @echo off&setlocal enabledelayedexpansion
  2. @set p1=D:\照\2017-02-26
  3. @set p2=D:\照\2017-02-19
  4. @set p3=D:\照\2017-01-20
  5. @set p=%p1% %p2% %p3%
  6. rem 遍历多个指定目录
  7. for %%a in (%p%) do (
  8. if exist %%a (
  9. rem 遍历指定目录下的所有*.jpg文件
  10. for /f "delims=" %%b in ('dir %%a\*.jpg /b') do (
  11. echo %%a\%%b
  12. )
  13. )
  14. )
  15. pause



将内容保存到文件


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


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


  1. @echo off
  2. rem &&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
  3. rem echo a && echo b && echo c
  4.  
  5. rem 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
  6. rem echo a || echo b || echo c
  7.  
  8. rem 管道命令,前一个命令的执行结果作为后一个命令的输入参数
  9. echo 123 | findstr "23"
  10. @pause



接收启动命令参数


  1. @echo off
  2. rem 打印第1个参数
  3. echo %1
  4.  
  5. rem 打印第2个参数
  6. echo %2
  7.  
  8. rem 去掉参数两边的引号
  9. echo %~2
  10. rem @pause>nul这样写就不会显示 请按任意键继续...
  11. @pause


1111.png


if语句


  1. @echo off
  2. rem 如果目录dir不存在,则创建。
  3. if not exist dir md dir
  4.  
  5. rem 如果输入的第1个参数为a,则打印ok
  6. rem if "%1"=="a" echo ok
  7.  
  8. rem 等于(equ)、不等于(neq)、小于(lss)、小于或等于(leq)
  9. rem 大于(gtr)、大于或等于(geq)
  10. rem 2>1
  11. if 2 gtr 1 echo GTR
  12.  
  13. rem errorlevel用来检测上一个dos命令是否执行成功
  14. rem 环境变量errorlevel的初始值为0
  15. rem 当一些命令执行不成功,就会返回一个数值,如:1 2
  16. if errorlevel 0 (
  17. echo 命令执行成功!
  18. ) else (
  19. echo 命令执行出错!
  20. )
  21.  
  22. rem 检查某个变量是否已定义
  23. if defined str1 echo str1已被定义
  24. @pause



goto :eof


  1. @echo off
  2. call :label1
  3. echo 这里会执行
  4. pause
  5.  
  6. rem 这里的goto :eof的作用是退出批处理
  7. goto :eof
  8. echo 这里不会执行
  9.  
  10. :label1
  11. echo 执行labe1
  12. rem 这里的goto :eof的作用是结束label1的执行
  13. goto :eof
  14. echo 这里不会执行


字符串处理

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

1111.png

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

标签: 批处理

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号