bat批处理是按行执行的,一行一行往下走。下面列一些基本的技巧,一小部分参考了网上的内容。

1、按树形模式展示列表

tree /f

2、判断文件是否存在

if not exist test.txt (echo 文件不存在
) else (echo 文件存在
)if exist test.txt (echo 文件存在
) else (echo 文件不存在
)

3、choice命令根据用户输入选项执行某个步骤

此命令本意是显示信息并暂停批处理程序,让用户在做一些交互的选择。比如 Anaconda 中安装 Python 包时的提示是否安装的 [y/n] 就是利用的这个命令。

有时,利用此命令占用内存较小、计时较为精确的特点,可以用此命令进行计时,程序会等待特定的时间,再执行下面的命令。以下语句表示等待 10 秒再执行批处理程序。

choice /t 10 /d y /n >nul

值得注意的是,用该命令计时有个缺陷:只能计时 0~9999 秒之内的时间(约 2.7 小时,但一般情况还是够用的)。

SET /P Choice=     请选择要进行的操作[1-2],然后回车:
cls
echo.
if "%Choice%"=="1" Goto step1
:step1
echo now step1

4、创建与删除目录或文件与移动(重命名)文件

#创建目录
md/mkdir test_dir
#删除目录
rd /s /q test_dir
#删除目录下所有文件
del /s /q /f test_dir\*
#删除文件
del /s /q /f test_file
#移动(重命名)
move old_file new_file

5、获取当前目录

set bat_path=%~dp0
echo %bat_path%

6、获取文件大小并比较大小

for /f %%i in ('dir /b test_file') do (set test_file_size=%%~zi
)
:: lss/gtr,表示小于/大于,其他的还有equ等于、neq不等于、leq小于等于、geq大于等于
if %test_file_size% lss 10240 (echo 小于10240
) else (echo 大于等于10240
)

7、获取文件内容关键字以及取值

for /F "tokens=* USEBACKQ" %%F in (`findstr /c:"key words" test\test.txt`) do (set temp=%%F#:~49,-17表示从第49个字节开始取,直到倒数第17个字节set content=!temp:~49,-17!echo !content!
)

8、判断变量值是否为空

if "!var!"=="" (echo 变量为空
)

9、设置窗口标题

title 这是标题

10、判断是否管理员权限启动

Rd "%WinDir%\system32\test_permissions" >NUL 2>NUL
Md "%WinDir%\System32\test_permissions" 2>NUL||(Echo 未使用管理员权限启动!&&Pause >nul&&Exit)
Rd "%WinDir%\System32\test_permissions" 2>NUL

11、取日期时间

set date_time=%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%
echo %date_time%

12、提取双引号内的字符串

@echo offsetlocal enabledelayedexpansion:: 先读出带有版本号的行的字符串,给temp
for /F "tokens=* USEBACKQ" %%F in (`findstr /c:"#define VERSION" version.h`) do (set temp=%%Fecho read result !temp!
):: tokens=3,表示提取第三部分的字符串
:: delims=,表示以什么为分隔符,把内容进行分隔:: 比如内容是“define version "1.0"”,tokens=3,delims= ,取出来就是1.0,
:: 它利用空格分隔了三部分出来“define”“version”“1.0”,取第3个
:: 如果要按双引号,则tokens^=2^ delims^=^",不要加双引号,利用转义把delims=配置为^",具体如下:::for /f "tokens=3 delims= " %%j in ('echo !temp!') do (
for /f tokens^=2^ delims^=^" %%j in ('echo !temp!') do (set version=%%~jecho=echo version: !version!echo=
)

13、执行脚本时使用参数

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

test.bat para1则在test.bat脚本中,可以用%1取到para1的值

14、跳转功能之goto

goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组,如:

goto end:end
echo this is the end

15、查看命令用法

可以使用命令+/?,来查看命令的用法,比如:

dir /?
显示目录中的文件和子目录列表。DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N][/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4][drive:][path][filename]指定要列出的驱动器、目录和/或文件。/A          显示具有指定属性的文件。属性         D  目录                R  只读文件H  隐藏文件            A  准备存档的文件S  系统文件            I  无内容索引文件L  重新分析点          O  脱机文件-  表示“否”的前缀/B          使用空格式(没有标题信息或摘要)。/C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来禁用分隔符显示。/D          跟宽式相同,但文件是按栏分类列出的。/L          用小写。/N          新的长列表格式,其中文件名在最右边。/O          用分类顺序列出文件。排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)E  按扩展名(字母顺序)   D  按日期/时间(从先到后)G  组目录优先           -  反转顺序的前缀/P          在每个信息屏幕后暂停。/Q          显示文件所有者。/R          显示文件的备用数据流。/S          显示指定目录和所有子目录中的文件。

16、for的用法

FOR %variable IN (set) DO command [command-parameters]%variable  指定一个单一字母可替换的参数。(set)      指定一个或一组文件。可以使用通配符。command    指定对每个文件执行的命令。command-parameters为特定命令指定参数或命令行开关。在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.如果启用命令扩展,则会支持下列 FOR 命令的其他格式:FOR /D %variable IN (set) DO command [command-parameters]如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。FOR /L %variable IN (start,step,end) DO command [command-parameters]该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列

17、常用命令操作的错误码判断

可以用errorlevel来判断命令操作的结果,IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。
因此下面的批处理文件是错误的
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷贝文件
IF ERRORLEVEL 1 ECHO 未找到拷贝文件
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作
IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误

无论拷贝是否成功,后面的:

未找到拷贝文件
用户通过ctrl-c中止拷贝操作
预置错误阻止文件拷贝操作
拷贝过程中写盘错误

都将显示出来。

以下就是几个常用命令的返回值及其代表的意义:

backup
0 备份成功
1 未找到备份文件
2 文件共享冲突阻止备份完成
3 用户用ctrl-c中止备份
4 由于致命的错误使备份操作中止diskcomp
0 盘比较相同
1 盘比较不同
2 用户通过ctrl-c中止比较操作
3 由于致命的错误使比较操作中止
4 预置错误中止比较diskcopy
0 盘拷贝操作成功
1 非致命盘读/写错
2 用户通过ctrl-c结束拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作format
0 格式化成功
3 用户通过ctrl-c中止格式化处理
4 因致命的处理错误使格式化中止
5 在提示“proceed with format(y/n)?”下用户键入n结束xcopy
0 成功拷贝文件
1 未找到拷贝文件
2 用户通过ctrl-c中止拷贝操作
4 预置错误阻止文件拷贝操作
5 拷贝过程中写盘错误

18、start命令执行命令或程序

start 命令

调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。

入侵常用参数:

MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

start [“title”] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters]“title” 指定在“命令提示符”窗口标题栏中显示的标题。
/dpatch 指定启动目录。
/i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。
/min 启动新的最小化窗口。
/max 启动新的最大化窗口。
/separate 在单独的内存空间启动 16 位程序。
/shared 在共享的内存空间启动 16 位程序。
/low 以空闲优先级启动应用程序。
/normal 以一般优先级启动应用程序。
/high 以高优先级启动应用程序。
/realtime 以实时优先级启动应用程序。
/abovenormal 以超出常规优先级的方式启动应用程序。
/belownormal 以低出常规优先级的方式启动应用程序。
/wait 启动应用程序,并等待其结束。

19、注释功能

rem和::,可以用来注释。

20、setlocal命令是变量在局部可被改变

setlocal,启动批处理文件中环境变量的本地化。通俗地讲,该命令执行后会使得批处理程序对局部变量进行修改,而不是始终保持全局变量的值。如果这里没有看懂的话,请比较以下两段代码就清楚了:

REM 1
@echo off
set /a a=123if %a% equ 123 (set /a a=%a%*2echo %a%
) else (echo %a% not equal to 123
)
pause

执行结果为:123。

REM 2
@echo off
set /a a=123setlocal enableDelayedExpansion
if !a! equ 123 (set /a a=!a!*2echo !a!
) else (echo !a! not equal to 123
)
endlocal
pause

执行结果为:246。

执行结果差异的原因在于第 1 段代码没有开启环境变量的本地化,因此在设置变量值后,引用变量时仍然是全局变量的值;使用 setlocal 指令后,解决了这一问题。显然,第 2 段代码是我们预期的结果。

比较这两段代码可以发现,使用 setlocal 主要需要注意以下两点:

需要声明 setlocal enableDelayedExpansion ;
变量引用形式均为 !a! 。

enableextensions
启用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。disableextensions
禁用命令扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。enabledelayedexpansion
启用变量延迟,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。disabledelayedexpansion
禁用变量延迟,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。

21、结束进程

taskkill,结束某一进程。常用的有以下两种用法:

结束已知应用名称的某一进程;
结束已知进程码的某一进程。

以关闭 Notepad++.exe 程序为例举些例子:

REM 1
taskkill /im notepad++.exeREM 2
taskkill /pid 1376 -t -f

进程码可以通过任务管理器查询,或者通过 cmd 运行 tasklist 获取。

参数 -t 表示结束该进程,-f 表示强制结束该进程及所有子进程。

22、输出文件内容

可以使用type命令,显示文本文件的内容。

TYPE [drive:][path]filename

windows批处理bat脚本技巧相关推荐

  1. Windows批处理BAT脚本

    批处理定义:顾名思义,就是将一系列命令按一定的顺序集合为一个可执行的文本文件,拓展名一般为BAT. 小知识: 1. 可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程. 2. Win+R ...

  2. windows批处理小脚本总结

    批处理是Windows自带的一个脚本引擎,语法简洁.内置一些功能强大的命令,并且可以与Windows上的其他软件进行良好的通信.批处理能够提供一系统自动化处理功能,大幅提高日常工作中的一些琐碎重复事情 ...

  3. windows批处理(bat)程序常用命令

    windows批处理(bat)程序常用命令 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码也是共用 ...

  4. windows 使用bat脚本文件,复制文件夹到另一个盘

    实现windows 使用bat脚本文件,复制文件夹到另一个盘,参考如下代码:/y是可以不显示:提示你需要覆盖一个文件,如下图: @echo off echo "使用bat脚本来复制文件夹和文 ...

  5. shell脚本在线转换Windows的bat脚本

    shell脚本在线转换Windows的bat脚本 地址:https://daniel-sc.github.io/bash-shell-to-bat-converter/

  6. windows下BAT脚本ftp上传文件

    windows下BAT脚本ftp上传文件 若有需要请替换ftpip.ftpuser.ftppasswd 为自己ftp服务器地.用户名以及密码. @echo off rem 获取系统时间的星期值 rem ...

  7. windows批处理(脚本)命令最全教程

    原文url: http://www.x5dj.com/Blog/00534041/00389984.shtml 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识 ...

  8. 【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \r\n )

    文章目录 一.报错信息 二.问题分析 二.解决方案 一.报错信息 使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 运行后出现中文乱码 ; 使用如下 Java 代码生成 b ...

  9. linux编写脚本读取txt文件,用bash脚本或者批处理 bat脚本 读取一个目录下.txt文件第一行内容存放到新文件a.txt...

    起因:我把cmd 控制台说成了dos! 发展:人类生气了,跟我扯了一堆 dos 还有什么玩意儿,在我第二次还说那个是dos界面以后:( 后续:人类要我写 批处理bat 还有linux bash 脚本去 ...

最新文章

  1. iOS开发-照片选择
  2. 在文件log 加入commit id_从物理文件理解InnoDB Redo Log
  3. Java 设计模式之单例模式
  4. camera理论基础和工作原理【转】
  5. SQL语句中,创建标识列、默认值及各种约束的语法介绍
  6. 专业词汇---BUG部分-02
  7. 单片机c语言三角波采样点,单片机课程设计---信号发生器.doc
  8. 网络盒子安装 linux,天猫魔盒安装原生linux的一些初步成果
  9. 简述神经元网络控制的作用和特点
  10. 【数字设计】恒玄科技_笔试面试题目分享
  11. Unity自定义Script模板
  12. java.lang.UnsatisfiedLinkError: Couldn't load XXX
  13. 钉钉企业邮箱smtp服务器
  14. 高压直流电源为什么要“接地”?如何“接地”?
  15. pycharm永久激活
  16. oracle死锁级别locked_mode
  17. eas bos 获取编码规则
  18. excel表格末尾添加一行_这样输入Excel公式,也太快了吧......
  19. 利用Python进行数据分析笔记-pandas建模(Patsy篇)
  20. 【问题解决】电脑突然/总蓝屏,终止代码显示:UNEXPECTED_STORE_EXCEPTION

热门文章

  1. 宝塔BT面板无法启动修复方法
  2. 【源码阅读技巧一】查看类关系图,接口实现关系图(idea版本)Diagrams关系图
  3. 英文手写墨水艺术字体
  4. system.in.read()用法
  5. 【Response】
  6. 1. R语言介绍、Rstudio的基本使用、帮助命令、内置数据集
  7. Win10 0x80190001错误解决
  8. 链表的基本操作(C语言)
  9. 关于川大667和972自命题考试的心得
  10. 2022-2028全球氨洗涤器行业调研及趋势分析报告