windows bat批处理脚本由于低成本、高效益,从某种角度上说更像是一门艺术,人们用其可以以更简单的方式完成复杂的任务。遗憾的是,随着c、java、python、golang、javascript等高级语言的蓬勃发展,选择使用传统脚本方式解决问题的人员越来越少,甚至很多类脚本任务也通过perl或python等高级语言变通实现。
  纵然脚本编程已是“老古董”,但不可否认它仍是运维人员解决问题的首要工具。因此对于运维人员来说,脚本编程仍是“酒中茅台”,简单、高效。同理,对于监控来说,脚本也是不二选择,得益于脚本与操作系统的浑然天成,意味着脚本只要写完即可工作,无需依赖任何运行环境。
  之所以写本文的一个原因就是笔者最近在用zabbix进行应用监控时(监控指定进程的存活性、内存占用大小、CPU利用率等),发现zabbix自带功能不能实现,需要自行实现,考虑过用python、golang等实现,后来考虑到python、golang等需要zabbix agent机器安装相应运行环境,实施成本较高,最终选择使用脚本编程实现。由于linux shell脚本编程,教程相对较多、功能相对强大、实现也相对容易;而windows bat批处理编程不仅教程少、不好上手,实现起来相对麻烦。因此整理本文,希望能给广大windows bat脚本攻城狮一点点帮助。

1、也来个“Hello World”

我们学java、python等高级语言,恐怕第一个DEMO都是输出“Hello World”字符串,学习bat批处理脚本,不妨也来个“Hello World”。

1) helloworld.bat

可以用任何文本编辑器,当然使用editplus、notepad等编辑器效率会更高,输入下述代码并保存为D:\cmdtest\helloworld.bat。

@echo off
rem This is a "Hello World" program.
echo Hello World!
echo=

打开cmd命令窗口,切换到D:\cmdtest目录,运行helloworld 或 helloworld.bat

D:\cmdtest>helloworld
Hello World!
2) 代码简要说明
  • @echo off,关闭之后所有命令的回显,不然bat文件中每条指令会在cmd命令窗口显示
  • rem,注释,还有::也表示注释,两者区别,大家请小度
  • echo,输出
  • echo=,输出空白行
3) 工具说明

为了提高bat批处理脚本开发、测试效率,建议:

  • 安装powercmd替代原cmd
  • 使用vscode,有良好的语法、关键字提示,并且自带terminal即cmd窗口

2、变量

1)变量声明

变量无需声明可直接引用,其值为空字符串,并且大小写不敏感。可使用defined关键字或是否为空字符串""判断变量是否为空,如下所示:

rem 将代码保存为bat文件执行
@echo off
rem set var2="var2"
if not defined var2 ( echo var2 is not defined, the value is: %var2%
) else ( echo var2 is defined, the value is: %var2%
)if "%var2%"=="" (echo var2 is not defined, the value is: %var2%
) else (echo var2 is defined, the value is: %var2%
)

说明:

  • 第一次会输出两遍var2 is not defined, the value is:
  • 先给变量赋值 set var2=“var2”,则会输出两遍 var2 is defined, the value is: “var2”
  • 如果变量set var2="var2"赋值过,然后将赋值set var2="var2"语句注释掉并运行,依然会输出 var2 is defined, the value is: “var2”,这是因为bat脚本变量不特殊处理的话是全局变量,只要脚本是在同一个cmd命令框运行便会存在,可通过 set var2= 清除
2)变量赋值
@echo off
set var1=2+2
set /a var2=2+2
set /p var3=Please input a number:
set /p md5=<file_info.md5
echo var1: %var1%
echo var2: %var2%
echo var3: %var3%
echo md5: %md5%
D:\cmdtest>var
Please input a number:100
var1: 2+2
var2: 4
var3: 100
md5: 76adfafs76776...

说明:

  • 变量赋值时等号前后不能有空格,类似set a = 1会报错
  • /a 是表达式运算,仅适合32位整型运算,可以是负数
  • /p 是提示输入,将输入值赋值给变量
  • set /p md5=<file_info.md5, 读取md5文件内容并赋值给md5变量
  • 可通过set a=清空变量
3)变量读取
  • 可通过%var%, 读取变量值
  • set var,列出var开头的所有变量
  • set,列出所有变量,如系统环境变量TEMP、PATH等也会列举出来
  • !var!,两个感叹号,延迟读取变量值,本文后面 “变量延迟” 部分会详细讲解
  • 需要了解的一些系统内置变量
    • %date%,系统日期,类似:2020/02/29 周六
    • %time%,获取系统时间,类似:17:13:15.18
    • %cd%,获取当前目录
    • %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字
    • %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
    • %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium
    • %PROCESSOR_IDENTFIER% 系统 返回处理器说明。
    • %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
    • %PROCESSOR_REVISION% 系统 返回处理器的版本号。
    • %COMPUTERNAME% 系统 返回计算机的名称。
    • %USERNAME% 本地 返回当前登录的用户的名称。
    • %USERPROFILE% 本地 返回当前用户的配置文件的位置。
    • %~dp0,bat脚本文件所在目录
4)变量作用域

默认为全局变量(Global),可使用setlocal命令将变量作用域设置为local,直到endlocal或exit命令,或bat文件执行结束,变量local作用域也结束并恢复到global作用域,看下述DEMO。
var_scope.bat

@echo off
setlocal
set v=Local Variable
echo v=%v%

cmd命令框

D:\cmdtest>set v=Global Variable
D:\cmdtest>var_scope
v=Local Variable
D:\cmdtest>echo v=%v%
v=Global Variable
D:\cmdtest>

读者朋友们可以尝试将var_scope.bat文件中的setlocal命令注释掉,然后执行上述cmd命令框中的代码,我们将发现变量v最终输出的是“Local Variable”,即外面设置的变量v被bat文件中的变量v玷污了。

5)变量延迟

var_normal.bat

@echo off
set a=1
set /a a+=1 > nul & echo %a%

var_normal.bat运行后将输出1,而不是2,原因如下:

当我们准备执行一条命令的时候,命令解释器会先将命令读取,如果命令中有环境变量,那么就会将变量的值先读取来出,然后在运行这条命令,如:echo %a%,当我们执行这条命令的时候,命令解释器会先读出%a%的值,即1,然后执行echo,所以输出1。

然而,上述脚本本意是输出a+=1运算后的a值,即2。bat脚本提供了变量延迟,即变量在使用时再读取,上述代码修改如下:
var_delay.bat

@echo off
setlocal EnableDelayedExpansion
set a=1
set /a a+=1 > nul & echo !a!

var_delay.bat 运行后会输出2,有2个注意事项:

  • setlocal EnableDelayedExpansion 开启变量延迟,无需关注变量延迟如何关闭,有时为了代码简洁也写成:@echo off & setlocal EnableDelayedExpansion
  • !a!,两个叹号,变量才会延迟读取
6)特殊变量

上文已经提及很多内置变量或命令,此处的特殊变量指命令行参数,比如运行var_arg.bat arg1 arg2,带了2个参数arg1,arg2,那么如何表示脚本文件本身,参数1、参数2如何获取呢?
var_arg.bat

@echo off & setlocal
echo arg0=%0
echo arg1=%1
echo arg1 no quotes=%~1
echo batfile fullpath=%~f0
echo batfile=%~n0
echo batfolder=%~dp0
D:\cmdtest>var_arg "marcus"
arg0=var_arg
arg1="marcus"
arg1 no quotes=marcus
batfile fullpath=D:\cmdtest\var_arg.bat
batfile=var_arg
batfolder=D:\cmdtest\

说明:

  • %*,表示参数列表,比如:var_arg.bat arg1 arg2 arg3,则 %* = arg1 arg2 arg3
  • %0,表示脚本文件名,调用时var_arg则%0=var_arg,若调用时var_arg.bat则%0=var_arg.bat
  • %1,表示第一个参数
  • %~1,第一个参数去引号,如:var_arg.bat “arg1”,%~1得到arg1
  • %~f0,脚本文件完整路径名
  • %~dp0,脚本文件所在目录

3、返回码和errorlevel

1)返回码

通常来说一条命令的执行结果返回的值只有两个,0 表示"成功",1 表示"失败",实际上,errorlevel 返回值可以是一个任何整型值,一般只定义在0~255之间。

@echo off
rem return code demo
exit /b %1
D:\cmdtest>returncode 0
D:\cmdtest>echo %errorlevel%
0
D:\cmdtest>returncode 1
D:\cmdtest>echo %errorlevel%
1
D:\cmdtest>returncode -1
D:\cmdtest>echo %errorlevel%
-1

bat脚本文件中exit指定的code即返回码,就是下一行获取到的errorlevel值,从demo可以看出errorlevel甚至可以是负值。
如果bat脚本文件中没有exit code命令,bat文件执行结束后,会不会有返回码?没有,有点类似void函数,因此errorlevel仍然是上次的-1。

2)errorlevel如何使用

通常来说,可以根据errorlevel是否等于0来判断脚本是否成功执行(0表示成功,>0值表示失败),若明确脚本返回码的情况下,也可以根据具体返回码值做具体处理,DEMO如下:假设执行脚本后,errorlevel=0,则

D:\cmdtest>if errorlevel 1 (echo fail) else (echo success)
success
D:\cmdtest>if %errorlevel% EQU 0 (echo success) else (echo fail)
success

说明:

  • errorlevel 1,errorlevel >= 1
  • %errorlevel% EQU 0,errorlevel == 0
  • EQU 数字比较关系会在本文后面 “if判断” 部分详细讲解

4、stdin, stdout, stderr

stdin:标准输入,重定向时也用数字0表示
stdout:标准输出,重定向时也用数字1表示
stderr:错误输出,重定向时也用数字2表示

1)重定向

标准输出重定向

dir > dir.txt     //dir文件、目录列表输出到dir.txt, dir.txt文件重新生成
dir >> dir.txt        //dir文件、目录列表添加到dir.txt, dir.txt存在则添加,否则新建
echo line1 > line.txt    //覆盖line.txt,内容为line1
type con > line.txt  //响应键盘输入,直到按ctrl+z结束,输出到line.txt文件

错误输出重定向

d:\cmdtest\stdout>dir aaa 2>error.txt
d:\cmdtest\stdout>type error.txt
找不到文件

标准、错误输出合并
通常我们会将标准输出和错误输出合并到一个文件,如下所示:

d:\cmdtest\stdout>DIR SomeFile.txt > output.txt 2>&1
d:\cmdtest\stdout>type output.txt驱动器 D 中的卷是 软件卷的序列号是 65F3-3762d:\cmdtest\stdout 的目录找不到文件

说明:遍历SomeFile.txt,先将遍历结果输出到output.txt,如果出错则将错误信息添加到
output.txt(此处的“找不到文件”)。

标准输入
将某个文件作为内容输入,用 < 表示,如下所示:

D:\cmdtest\stdout>sort < countries.txt
America
Australia
China
EnglandD:\cmdtest\stdout>type countries.txt
China
America
England
Australia
D:\cmdtest\stdout>

将countries.txt文件中的内容进行排序显示。

2)输出挂起、丢弃

用NUL表示丢弃任何程序输出,2个经典应用:

  • 字符串查找,findstrex.bat
@echo off & setlocal
set str1=The most severe place of New SARS is Wuhan.
set str2=%~1
echo %str1% | findstr /i "%str2%" > nul && (echo "found") || (echo "not found")
D:\cmdtest>findstrex.bat wuhan
"found"
  • 程序暂停若干秒
@echo off
echo "program sleep 5 seconds, start..."
ping /n 5 127.1>nul
echo "program sleep 5 seconds, end..."
exit /b 0

先输出"program sleep 5 seconds, start…",5秒后再输出"program sleep 5 seconds, end…"

3)管道符 | 使用

管道符 | 通常用于一个命令的输出作为另一个命令的输入,如:

DIR /B | SORT

DIR /B,/B 使用空格式(没有标题信息或摘要)。
DIR /B | SORT,将dir /b结果进行字符串排序

5、if判断与&、&&、||

顺序、选择和循环是编程语言的常见3种语句,bat脚本也是如此,bat脚本if选择语句语法如下:

if 条件 (do...)
if 条件 (do...) else (do ...)

注意:

  • 条件只能是单个条件,不能用and或or进行条件与或运算,但是可以使用not 进行条件非运算
  • 没有elseif

条件判断比较常见应用场景如下:

1)文件是否存在,isexist.bat
@echo off
IF EXIST "temp.txt" (ECHO found
) ELSE (ECHO not found
)
2)变量是否定义
IF "%var%"=="" (TODO)
IF NOT DEFINED var (TODO)
3)比较字符串是否相等,str.bat
@echo off & setlocal
set /p arg1="please input a string:"
set /p arg2="please input another string:"
if %arg1%==%arg2% (echo %arg1% equals %arg2%) else (echo %arg1% not equals %arg2%)
if not %arg1%==%arg2% (echo %arg1% not equals %arg2%) else (echo %arg1% equals %arg2%)
if %arg1% equ %arg2% (echo %arg1% equals %arg2%) else (echo %arg1% not equals %arg2%)
if %arg1% neq %arg2% (echo %arg1% not equals %arg2%) else (echo %arg1% equals %arg2%)set /p name="please input your name: "
if /i "%name%"=="marcus" ( echo You are Marcus! ) else ( echo You are not Marcus! )
D:\cmdtest\lianxi>str
please input a string:aa
please input another string:aa
aa equals aa
aa equals aa
aa equals aa
aa equals aa
please input your name: aaa
You are not Marcus!

说明:

  • 两个字符串变量是否相等,可以使用==,equ;不等则可以使用 not ==,neq
  • 字符串变量与常量比较,请带双引号,如:"%name%"==“marcus”
  • 带 /i,表示忽略大小写,类似java的equalsIgnoreCase
4)数字比较
@echo off & setlocal
set num1=1
set num2=2
if %num1% EQU %num2% (echo %num1% == %num2%) else (echo echo %num1% != %num2%)EQU,等于
NEQ,不等于
LSS,小于
LEQ,小于等于
GTR,大于
GEQ,大于或等于
5)程序返回码处理

本文前面部分已经提及程序返回码处理,简单demo如下:

if errorlevel 1 (TODO)
if %errorlevel% equ 0 (TODO)
6)&、&&、||
  • &,顺序执行多条命令,而不管命令是否执行成功
    如:本文demo中经常出现的 @echo off & setlocal
  • &&,顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
  • ||,顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令(即:只有前面命令执行错误时才执行后面命令),findstr命令时经常会使用&&和||符号,分别表示:找到执行…,没找到执行…
set str="Apple,Huawei,Xiaomi,Oppo,Vivo"
echo  %str% | findstr /i "asus" > nul && (FOUND,TOTO) || (NOTFOUND, TODO)

6、循环

bat脚本实现循环有2种方式:使用goto或for循环,简单demo如下:
goto实现方式,1-10的循环:

@echo off
set var=0
rem ************loop start.
:continue
set /a var+=1
echo loop time: %var%
if %var% lss 10 goto continue
rem ************loop end.
echo loop execution finished.

for /L in (start, step, end) do ():

@echo off
set var=0
rem ************loop start.
for /L %%i in (1,1,10) do (echo loop time: %%i)
rem ************loop end.
echo loop execution finished.

说明:

  • bat脚本,循环中并没有continue、break等中断,只能通过goto跳转跳出循环
  • 推荐使用for循环实现
  • for循环,bat文件中变量使用%%i,在cmd命令框则使用%i
  • 可以在cmd命令框中使用 for /? 查看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)将产生序列
1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
FOR /F [“options”] %variable IN (file-set) DO command [command-parameters]
FOR /F [“options”] %variable IN (“string”) DO command [command-parameters]
FOR /F [“options”] %variable IN (‘command’) DO command [command-parameters]
或者,如果有 usebackq 选项:
FOR /F [“options”] %variable IN (file-set) DO command [command-parameters]
FOR /F [“options”] %variable IN (“string”) DO command [command-parameters]
FOR /F [“options”] %variable IN (‘command’) DO command [command-parameters]

另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
%~I - 删除任何引号("),扩展 %I
%~fI - 将 %I 扩展到一个完全合格的路径名
%~dI - 仅将 %I 扩展到一个驱动器号
%~pI - 仅将 %I 扩展到一个路径
%~nI - 仅将 %I 扩展到一个文件名
%~xI - 仅将 %I 扩展到一个文件扩展名
%~sI - 扩展的路径只含有短名
%~aI - 将 %I 扩展到文件的文件属性
%~tI - 将 %I 扩展到文件的日期/时间
%~zI - 将 %I 扩展到文件的大小
%~PATH:I−查找列在路径环境变量的目录,并将到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串可以组合修饰符来得到多重结果:PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展 到找到的第一个完全合格的名称。如果环境变量名 未被定义,或者没有找到文件,此组合键会扩展到 空字符串 可以组合修饰符来得到多重结果: %~dpI - 仅将 %I 扩展到一个驱动器号和路径 %~nxI - 仅将 %I 扩展到一个文件名和扩展名 %~fsI - 仅将 %I 扩展到一个带有短名的完整路径名 %~dpPATH:I−查找列在路径环境变量的目录,并将到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串可以组合修饰符来得到多重结果:PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩展到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。

1)FOR %variable IN (set) DO command [command-parameters]

下述代码请复制到bat文件执行

@echo off
rem 遍历字符串
for %%i in (Hangzhou Ningbo Wenzhou Shaoxin) do echo %%irem 遍历USERPROFILE下的文件
FOR %%i IN (%USERPROFILE%\*) DO ECHO %%i
2)/D /R参数

代码请在cmd命令框中运行

遍历目录
语法:FOR /D %variable IN (set) DO command [command-parameters]
rem 遍历文件目录
FOR /D %I IN (%USERPROFILE%\*) DO @ECHO %I递归遍历
语法:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
rem 递归遍历文件
FOR /R "%TEMP%" %I IN (*) DO @ECHO %I
rem 递归遍历文件目录
FOR /R "%TEMP%" /D %I IN (*) DO @ECHO %I
3)/L 参数

下述代码请在cmd命令框中运行,@echo 表示关闭echo回显

FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
rem (1,1,5)将产生序列 1 2 3 4 5
FOR /L %i in (1,1,5) do @echo %irem (5,-1,1)将产生序列(5 4 3 2 1)
FOR /L %i in (5,-1,1) do @echo %i
4)/F 参数

语法说明:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:eol=c           - 指一个行注释字符的结尾(就一个)skip=n          - 指在文件开始时忽略的行数。delims=xxx      - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。

下述代码请保存为bat文件执行

@echo off
rem 分割字符串
for /f "delims=, tokens=1,2,*" %%j in ("Hangzhou,Ningbo,Wenzhou") do echo %%j,%%k,%%lrem 逐行读取文件
for /f %%j in (d:\cmdtest\stdout\line.txt) do echo %%jrem 执行命令,并将执行结果逐行读取
for /f %%j in ('wmic process get caption') do echo %%j

delims,tokens,skip 选项说明

  • delims,分隔符,默认是空格,逐行读取文件时;若行内容中有空格,请指定delims,否则只读取空格前的单词
  • tokens,从第几列开始读取;tokens=2,* 表示第二列开始读取%%i,第三列开始赋值给%%j;tokens=2,3,* 表示第二列开始读取%%i,第三列赋值给%%j,第四列开始赋值给%%k
  • skip,跳过前几行

7、函数或子程序实现

bat脚本没有显性的function、sub等关键字,我们可以通过goto变相实现函数,局部代码重用。
calc.bat

@echo off & setlocal
rem This is a simple calculator.
rem usage: calc + 3 5, result is 3+5=8.set m=%~1
set a=%~2
set b=%~3
set result=0
if "%m%"=="+" goto add
if "%m%"=="-" goto sub
if "%m%"=="*" goto mul
if "%m%"=="/" goto div
echo "invalid arguments, usage: calc + 3 5, result is 3+5=8."
goto :eof:add
set /a result=a+b
goto result:sub
set /a result=a-b
goto result:mul
set /a result=a*b
goto result:div
set /a result=a/b
goto result:result
echo %a% %m% %b% = %result%
D:\cmdtest\lianxi>calc s 1 2
"invalid arguments, usage: calc + 3 5, result is 3+5=8."
D:\cmdtest\lianxi>calc + 1 2
1 + 2 = 3
D:\cmdtest\lianxi>calc - 1 2
1 - 2 = -1

说明:

  • eof, 此处直接退出批处理,等同于exit
  • 在函数序执行时,执行完别忘记跳转到类似:eof程序结束处以免干扰其它函数执行,如demo中的add执行完后若没有goto result,将继续执行sub函数。
  • 函数定义、返回值如何处理等可以参考 “bat批处理脚本 函数使用说明 函数调用结果如何返回”

8、后记

至此,windows bat 批处理脚本编写指南告一段落,知识点包括:

  • 变量使用
  • 程序返回码及errorlevel使用
  • stdin, stdout, stderr
  • if判断与&、&&、||
  • 循环使用:goto实现、for循环
  • 函数使用

基于上述知识点,基本上可以完成绝大多数bat批处理脚本。如要深究BAT脚本不妨参考下述博文:

BAT脚本知识点深究:

  • BAT常见命令解析
  • 字符串使用详细说明
  • tomcat 启动脚本startup.bat、catalina.bat解析
    • windows下tomcat8启动脚本代码剖析–startup.bat
    • windows下tomcat8启动脚本代码剖析–catalina.bat
  • bat批处理脚本 函数使用说明 函数调用结果如何返回

BAT脚本案例:

  • BAT批处理脚本案例–计算字符串长度
  • BAT批处理脚本案例–时间戳计算返回距1970-1-1 零点的秒数
  • Bat批处理脚本案例–0开头字符串如何转成数字
  • BAT批处理脚本案例–判断证书是否到期

windows bat 批处理脚本编写指南相关推荐

  1. Windows BAT批处理脚本教程

    第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识: ...

  2. BAT批处理脚本案例--计算字符串长度

    BAT批处理脚本没有提供字符串长度计算函数,为此需要自定义实现,本例将涉及批处理脚本下述几个关键知识点: 1)call 调用,调用结果如何赋值给变量 2)字符串截取 3)goto使用 4)变量延时读取 ...

  3. windows的cmd与bat批处理脚本(batch script)

    目录 序:批处理看这一篇就够了 一.前言 二.使用技巧 1.查看帮助 2.命令的执行 3.变量 4.条件语句 5.循环 6.参数 7.函数(过程调用) 8.调用外部脚本 9.命令执行结果和错误判断 1 ...

  4. windows 批处理脚本编写

    windows 批处理脚本编写 什么是批处理 批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理.批处理文件的扩展名为bat. 目前比较常见 的批处理包含两类:DOS批 ...

  5. 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)

    目录 1.实现效果 2.实现代码 3.使用代码新建一个bat脚本文件 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 本来阿里云服务器 ...

  6. Windows下bat批处理脚本常用场景整理,持续更新中。。。

    Windows下bat批处理脚本常用场景整理,持续更新中... 一.Winodws下使用bat脚本对结果进行筛选 例如:在筛选出来的结果中,筛选是否有"$G"字段 adb shel ...

  7. Windows系统bat批处理脚本实现暂停时间延迟方法

    描述:Windows系统bat批处理脚本实现暂停时间延迟方法 代码: @ping 127.0.0.1 -n 1 >nul

  8. 使用bat批处理脚本自动设置IP和IE代理

    在不同的网络环境间切换时需要手动修改IP和IE代理设置,较为繁琐,可以通过编写相应的bat批处理脚本自动完成配置,做到一键切换.以下是一个示例: @echo off::echo set ip...:: ...

  9. bat批处理脚本入门

    BAT 批处理脚本 教程 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令 ...

  10. BAT批处理脚本结合SQL应用案例

    BAT批处理脚本结合SQL应用案例 本文是BAT(批处理脚本)结合SQL的应用,脚本结合了OSQL(可执行Transact-SQL语句 ).BCP(执行数据导入导出的工具).BLAT(命令行发邮件的工 ...

最新文章

  1. html post 发送两次,JS发送跨域Post请求出现两次请求的解决办法
  2. 2020年第十五届全国大学生智能汽车竞赛浙江赛区比赛成绩分析
  3. QT的QStackedWidget类的使用
  4. Android中级教程之--------Android应用程序的生命周期(一定要理解,面试会问的哦!)
  5. Django01-1: request 方法
  6. android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译
  7. 计算机系统操作工中级工试卷,计算机系统操作工中级理论试题及答案.doc
  8. 解密游走于法律边缘的爬虫技术
  9. 试题库管理系统--数据库设计
  10. 初学python100例-案例23 python输出菱形图案 青少年python编程 少儿编程案例讲解
  11. c语言智能车跑道检测程序,智能小车的循迹方法与流程
  12. 快手、抖音、微视类短视频APP源码开发SDK接入教程,7步就能搞定短视频APP开发制作
  13. DZ60通过IIC读取LM75温度遇到问题解决方法
  14. “免费代理IP” 又双叒叕来了,这次无限量、更稳定。(附带使用教程)
  15. 台式计算机麦说不了话,耳机有声音麦克风没声音怎么办?解决电脑耳机有声音麦不能说话...
  16. c语言循环的三个要素是什么意思,什么是循环结构知识点详解
  17. 阿里云对象存储OSS文件上传
  18. 大数据投资人必读:中国大数据发展与投资分析报告
  19. 2021-2022 ACM-ICPC Latin American Regional Programming Contest
  20. 输入圆的半径,计算圆的周长与面积

热门文章

  1. 【蓝牙】室内外定位技术-钛斗™星地融合定位系统
  2. iOS透明导航栏的平滑过渡(进阶版)
  3. C# 打印自定义纸张设置
  4. 汉字编码 拼音输入法
  5. 关于晶圆介绍以及IGBT晶圆的应用
  6. 经济学和金融学的区别
  7. java 文件夹排序,Java文件夹排序(先文件夹排序,后文件排序)
  8. 【概率论】高斯分布、中心极限定理、伯努利分布、二项分布
  9. 初始化audio失败是什么意思_DirectXAudio初始化失败,高手看 – 手机爱问
  10. 企业微信第三方服务商应用开发及上架教程