目录
- 常见用途
- bat命令速查
- 常用参数
- echo
- 注释
- Rem
- 使用::声明
- dir :获取目录内容
- > :将输出重定向到文件
- 变量
- 命令行参数
- set命令
- 字符串
- 数值
- 局部变量 vs 全局变量
- 环境变量输出
- 字符串
- 创建
- 空字符串
- 字符串拼接
- 字符串长度
- 转int
- 截取
- 右对齐
- 删除字符串
- 删除两端(保留中间)
- 删除空格:=
- 替换
- 数组
- 创建
- 访问
- 修改
- 迭代
- 数组长度
- 结构体
- if语句
- if defined :变量是否存在
- if exists:文件是否存在
- if errorlevel:测试运行的最后一个命令的退出代码
- for语句
- /d
- /r
- /l
- /f
- goto语句
- 运算符
- 关系运算符
- 系统日期
- 日期格式化
- 系统时间
- 输入输出
- 重定向
- 函数
- 调用 call :function_name
- 进程
- 查看进程列表TASKLIST
- 终止进程
- 启动进程
- 别名
- doskey 别名管理
- 创建
- 删除
- 管道(|)
批处理脚本文件具有特殊的扩展名BAT或CMD,这种类型的文件通过称为**命令解释器(cmd.exe)**的系统文件提供的接口(shell)来识别和执行。
常见用途
- 为不同的目的设置服务器
- 自动管理活动和日志,如删除不需要的文件或日志文件
- 自动将应用程序从一个环境部署到另一个环境。
- 立即在各种机器上安装程序。
bat命令速查
常用参数
/L: for循环移动范围的/L参数用于迭代数组。/A:数值
echo
@echo off
- “echo off” :关闭脚本的显示(不显示命令)。
- “@” :使命令也适用于自己。
注释
Rem
Rem Remarks
程序执行时忽略Rem关键字之后的任何内容。
使用::声明
:: Remarks
dir :获取目录内容
> :将输出重定向到文件
@echo off
Rem This is for listing down all the files in the directory Program files
dir \”C:\\Program Files\” > C:\\lists.txt
echo \”The program has completed\”
变量
命令行参数
rem Test.bat
@echo off
echo %1
echo %2
echo %3
运行方式
Test.bat 1 2 3
set命令
set /A variable-name=value
- variable-name: 变量的名称
- value:变量值。
- /A:如果该值本质上是数值,则使用此开关。
字符串
@echo off
set message=Hello World
echo %message%
rem 变量需要包含在%符号中显示
数值
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
局部变量 vs 全局变量
- 默认情况下为全局变量。
- 调用SETLOCAL命令,使变量局部在脚本的范围内。
- 在调用SETLOCAL之后,任何变量赋值在调用ENDLOCAL,调用EXIT,或者当执行到达脚本中的文件结尾(EOF)时都会返回。
@echo off
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
环境变量输出
@echo off
echo %JAVA_HOME%
字符串
创建
set message=Hello World
空字符串
SET a=
if [%a%]==[] echo \”String A is empty\”
要检查是否存在空字符串,需要在方括号中包含变量名,并将其与方括号中的值进行比较。
字符串拼接
@echo off
SET a=Hello
SET b=World
SET /A d=50
SET c=%a% and %b% %d%
echo %c%
:: Hello and World 50
字符串长度
@echo off
set str=Hello World
call :strLen str strlen
echo String is %strlen% characters long
exit /b
:strLen
setlocal enabledelayedexpansion
:strLen_Loop
if not \”!%1:~%len%!\”==\”\” set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof
转int
使用set变量设置为字符串的变量后,可以使用set变量的**/A开关转换为整数**。
@echo off
set var=13145
set /A var=%var% + 5
echo %var%
截取
%variable:~num_chars_to_skip%
%variable:~num_chars_to_skip,num_chars_to_keep%
输出:
HelloworldHello
~0,5用于指定需要显示的字符
右对齐
@echo off
set x=1000
set y=1
set y=%y%
echo %x%
set y=%y:~-4%
echo %y%
输出
10001
使用~-4选项来表示只想显示字符串y的最后4个字符。
删除字符串
@echo off
set str=Batch scripts is easy. It is really easy.
echo %str%
:: 删除is
set str=%str:is=%
echo %str%
:: Batch scripts easy. It really easy.
删除两端(保留中间)
@echo off
set str=Batch scripts is easy. It is really easy
echo %str%
set str=%str:~1,-1%
echo %str%
:: atch scripts is easy. It is really eas
删除空格:=
@echo off
set str=This string has a lot of spaces
echo %str%
set str=%str:=%
echo %str%
:: Thisstringhasalotofspaces
替换
@echo off
set str=This message needs changed.
echo %str%
set str=%str:needs=has%
echo %str%
:: This message has changed.
数组
创建
- 方法一:set
set a[0]=1
- 方法二:值列表遍历
@echo off
set list=1 2 3 4
(for %%a in (%list%) do (
echo %%a
))
访问
echo %a[0]%
修改
Set a[3]=4
迭代
@echo off
setlocal enabledelayedexpansion
set topic[0]=comments
set topic[1]=variables
set topic[2]=Arrays
set topic[3]=Decision making
set topic[4]=Time and date
set topic[5]=Operators
for /l %%n in (0,1,5) do (
echo !topic[%%n]!
)
for循环移动范围的/L参数用于迭代数组。
数组长度
@echo off
set Arr[0]=1
set Arr[1]=2
set Arr[2]=3
set Arr[3]=4
set \”x=0\”
:SymLoop
if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set /a \”x+=1\”
GOTO :SymLoop
)
echo \”The length of the array is\” %x%
结构体
@echo off
set len=3
set obj[0].Name=Joe
set obj[0].ID=1
set obj[1].Name=Mark
set obj[1].ID=2
set obj[2].Name=Mohan
set obj[2].ID=3
set i=0
:loop
if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=
for /f \”usebackq delims==.tokens=1-3\” %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name=%cur.Name%
echo Value=%cur.ID%
set /a i=%i%+1
goto loop
if语句
if %c%==15 (echo \”The value of variable c is 15\”) else (echo \”Unknown value\”)
if defined :变量是否存在
if defined str1 echo \”Variable str1 is defined\”
if exists:文件是否存在
if exist C:\\set3.txt (echo \”File exists\”) else (echo \”File does not exist\”)
if errorlevel:测试运行的最后一个命令的退出代码
if errorlevel n somecommand
各种命令发出整数退出代码来表示命令的状态。 通常,如果命令成功完成,则命令通过传递0;如果命令失败,命令通过传递1。
for语句
- %variable 指定一个单一字母可替换的参数。注意:批处理脚本中使用%%variable
- (set) 指定一个或一组文件。可以使用通配符。
- command 指定对每个文件执行的命令。
- command-parameters 为特定命令指定参数或命令行开关。
/d
/r
/l
/f
goto语句
@echo off
SET /A a=5
if %a%==5 goto :labela
if %a%==10 goto :labelb
:labela
echo \”The value of a is 5\”
exit /b 0
:labelb
echo \”The value of a is 10\”
运算符
关系运算符
系统日期
echo %DATE%
日期格式化
@echo off
echo/Today is: %year%-%month%-%day%
goto :EOF
setlocal ENABLEEXTENSIONS
set t=2&if \”%date%z\” LSS \”A\” set t=1
for /f \”skip=1 tokens=2-4 delims=(-)\” %%a in (\’echo/^|date\’) do (
for /f \”tokens=%t%-4 delims=.-/ \” %%d in (\’date/t\’) do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF
系统时间
echo %TIME%
输入输出
- 0:stdin 标准输入
- 1:stdout 标准输出
- 2:stderr 错误消息
重定向
DIR C:\\ > lists.txt 2> &1
- 使用文件编号和"&"前缀来组合stdout和stderr流
函数
:function_name
Do_something
EXIT /B 0
- function_name是赋予函数的名字,它应该与函数的实际功能相匹配。
- EXIT语句用于确保函数正常退出.
:Display
SET /A index=2
echo The value of index is %index%
EXIT /B 0
调用 call :function_name
@echo off
Rem main
SETLOCAL
CALL :Display 5 , 10
EXIT /B %ERRORLEVEL%
Rem function
:Display
echo The value of parameter 1 is %~1
echo The value of parameter 2 is %~2
EXIT /B 0
- 确保在主程序中放入EXIT / B%ERRORLEVEL%语句,以便将主程序的代码与函数分开。
- 使用~1来访问发送给函数的第一个参数,同样使用~2来访问第二个参数。
进程
查看进程列表TASKLIST
:: 获取内存大于40MB的进程
tasklist /fi \”memusage gt 40000\”
:: 获取内存大于40MB的进程
tasklist /fi \”memusage gt 40000\”
终止进程
START \”title\” [/D path] [options] \”command\” [parameters]
:: 杀死(终止)打开的记事本任务
taskkill /f /im notepad.exe
:: 杀死了一个ID为9901的进程
taskill /pid 9901
启动进程
START \”title\” [/D path] [options] \”command\” [parameters]
options:
:: 在新窗口中运行批处理脚本test.bat。 窗口将以最小化模式启动,并且指定标题为:“Test Batch Script”。
START \”Test Batch Script\” /Min test.bat
:: 在另一个进程中运行Microsoft Word,然后在MS Word中打开文件TESTA.txt
START \”\” \”C:\\Program Files\\Microsoft Office\\Winword.exe\” \”D:\\test\\TESTA.txt\”
别名
dw=dir /w
当要执行dir /w命令时,可以简单地键入dw这个单词。dw这个词现在已经成为命令dir /w的别名。
doskey 别名管理
DOSKEY [options] [macroname=[text]]
创建
@echo off
doskey cd=cd/test
doskey d=dir
删除
@echo off
doskey cd=cd/test
doskey d=dir
d=
将d的值设置为NULL,所以宏d将被删除。
管道(|)
管道运算符(|)将一个命令的输出(默认为STDOUT)引导到另一个命令的输入(默认为STDIN)。
:: 两个命令同时启动,但是sort命令暂停,直到它接收到dir命令的输出。
:: sort命令使用dir命令的输出作为输入,然后将其输出发送到句柄1(即STDOUT)。
dir C:\\ | sort
到此这篇关于教你编写bat脚本Windows批处理的文章就介绍到这了,更多相关bat脚本Windows批处理内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!
您可能感兴趣的文章:
- BAT 批处理脚本教程(详细篇悠久资源网补充)
- Windows下bat批处理脚本使用telnet批量检测远程端口小记
- bat批处理脚本中文乱码的解决
- BAT批处理、VBScript批量安装字体脚本分享
- 常用的bat批处理脚本大全(精选)