转BATCMD批处理⽂件脚本总结(中⽂)
1.综述
1、”.bat”: 这是微软的第⼀个批处理⽂件的后缀名,在⼏乎所有的Windows 操作系统内都能运⾏。
2、 “.cmd”: 是为Windows NT 设计的命令⾏脚本,为 shell⽽设计的,对于COMMAND.COM不具有向后兼容性。
3、⽬前所知道的.cmd 和 .bat⽂件的区别是对ERRORLEVEL变量的改变:当Command Extensions (命令⾏扩展)处于enabled状态时,哪怕
是.cmd⽂件中⼀个成功执⾏的命令都可以改变ERRORLEVEL的值,⽽在.bat ⽂件中ERRORLEVEL 变量只有在遇到错误的时候才发⽣改变。2.@echo off/echo on
1. “echo” ⽤来在控制台上显⽰信息。
2. “echo.” ⽤来显⽰⼀空⾏。(注意:echo和右下⾓的点之间没有空格,如果有空格就变成显⽰句点了。)
3. “echo off”: 在使⽤了这⾏命令之后,其他命令都只显⽰命令的结果,⽽不显⽰命令本⾝。
4. “echo on”: 这是默认值,表⽰显⽰所有的命令结果和命令⾏本⾝。
5. “echo”: 当执⾏echo⽽不带任何参数的时候,会显⽰echo的打开或关闭的状态:“ECHO is on” 或者 “ECHO is off”。
6. “@”:@ 符号表⽰不显⽰本⾏的命令本⾝。如果只⽤echo off,虽然echo off后⾯的命令不显⽰出来,只显⽰命令的结果,但是echo off它⾃⼰确被
显⽰出来了,这就是使⽤@echo off的原因。
3.SETLOCAL/ENDLOCAL
1. SETLOCAL⽤来控制批处理⽂件中变量的可见性。就是⾼级语⾔常说的局部变量。凡是在SETLOCAL和ENDLOCAL之间的变量都是局部的,以免被其
他脚本⽂件改变变量的值,⽽没有使⽤这个标⽰的都是Global visible(全局变量),很可能被其他⽂件所改变。下⾯的例⼦很好的说明了这⼀
点。
@echo off
setlocal
set version=1.0
echo the first version is %version% endlocal
echo the second version is %version% ::The follow is global variable
set version=2.0
echo the third version is %version%执⾏这个⽂件,将输出:
the first version is 1.0
the second version is
the third version is 2.0
第⼆个version是全局变量,但是没有定义,所以是空值。再次执⾏:
the first version is 1.0
the second version is 2.0
the third version is 2.0
@echo off
setlocal
set version=1.0
echo the first version is %version% endlocal
echo the second version is %version% ::The follow is global variable
set version=5.0
echo the third version is %version%执⾏第⼆个⽂件:
the first version is 1.0 the second version is 2.0 the third version is 5.0
再次执⾏:
the first version is 1.0 the second version is 5.0 the third version is 5.0
由此可见变量的作⽤域在简单的批处理⽂件还是很慎重,否则可以造成千变万化的结果,这样这个脚本就很不稳定了。所以,变量作⽤域很重要,得注意。
2. EnableDelayedExpansion. (参考百度:)
代码结果
@echo off
setlocal
set var=test & echo show %var% endlocal show
当解析到%var%是,CMD还没有执⾏完任何语句,所以系统并不认识这个变量,所以认为变量没有定义,所以显⽰空值。
@echo off
Setlocal ENABLEDELAYEDEXPANSION set var=test & echo show !var! endlocal show test
使⽤了变量延迟扩展,并使⽤!var!,其实在执⾏的时候也不认识这个变量,但是这条语句执⾏完以后,仍然返回去赋值。这种事后处理,就是变量延迟扩展。
For语句看起来写了很多⾏,其实认为是⼀条语句。所以如果在没有使⽤变量延迟扩展的时候,在For语句⾥的每⼀⾏,都只是记忆着系统所记忆的东西。⽽使⽤了变量延迟扩展之后,会执⾏完了整条语句,再“事后处理”给与赋值,然后才显⽰到控制台。下⾯的例⼦很能说明问题。
@echo off
setlocal
:: count to 5
set _tst=0
FOR /l %%G in (1,1,5) Do (echo [%_tst%] & set /a _tst+=1) echo Total = %_tst%[0] [0] [0] [0] [0]
Total = 5
@echo off
setlocal EnableDelayedExpansion
:: count to 5
set _tst=0
FOR /l %%G in (1,1,5) Do (echo [!_tst!] & set /a _tst+=1) echo Total = !_tst![0]
[1]
[2]
[3]
[4]
Total = 5
在CMD⾥⾯,系统使⽤“^”作为脱字符。使⽤变量延迟扩展ENABLEDELAYEDEXPANSION之后,脱字符^ 就可以⼀直产⽣作⽤,⽽不再局限于⼀个命令⾏。这样对于处理包含HTML和XML格式的字符的时候,就⽅便多了。请看下⾯的例⼦。
@echo off
@echo off
REM 这个⽂件会创建到本地磁盘,⽂件内容为Hello。
REM 也就是第⼆次运⾏的时候,脱字符没有发挥作⽤。
SETLOCAL
Set _html= Hello^&
Echo %_html%
ENDLOCAL
@echo off
REM 这个⽂件会输出Hello&,脱字符⼀直产⽣作⽤。
SETLOCAL EnableDelayedExpansion
Set _html= Hello^&
Echo !_html!
ENDLOCAL
@echo off
REM 使⽤变量延迟扩展来处理html语句。
SETLOCAL EnableDelayedExpansion
Set _html=html format: ^<title^>Hello world^</title^>
Echo !_html!
ENDLOCAL
3. DISABLEEXTENSIONS.
值得注意的是,这⾥的扩展不是扩展名,⽽是命令的扩展功能,⽐如 “/F” 参数就是For循环的命令扩展。
只有使⽤了命令扩展我们才能执⾏下⾯的语句。
FOR /F "DELIMS=" %%a IN (test.TXT) DO @echo %%a
否则我们要输出⼀个⽂件,只能使⽤了。命令扩展默认是开启的。
4.Set
1. SET 不带任何参数: 将显⽰当前⽤户的所有系统环境变量。(set)
2. SET 带⼀个变量名: 尝试搜索并显⽰以这个变量名开头的环境变量。(set PROCESSOR就会显⽰以PROCESSOR开始的变量)
3. SET variable=string: 给⼀个变量赋值。
4. SET “”: 使⽤⼀对空的双引号,会显⽰⼀个不带参数的情况下没显⽰出来的变量。我这⾥就显⽰下⾯两个奇怪的变量。
=C:=C:\Users\Lingli
=E:=E:\Powershell
使⽤cd %=C:%还真可以转到C:\Users\Lingli⽬录下。
5. SET “var=”(or SET var=): 删除⼀个变量。
6. SET /A variable=expression: 使⽤算数运算符来给变量赋值。
()                  - 组合
! ~ -              - ⼀元操作符
* / %              - 算数运算符
+ -                -算数运算符
<< >>              - 逻辑偏移
&                  - 位与
^                  - 位异或
|                  - 位或
= *= /= %= += -=    - 赋值
&= ^= |= <<= >>=
7. SET /P variable=[提⽰字符]:提⽰⽤户输⼊并把输⼊的值赋给variable。提⽰字符可以为空。有时可以使⽤CHOICE来代替SET /P.
@echo off
setlocal
set /p version=Please enter the QQ version:
echo you will install QQ %version%
endlocal
8. 有⽤的环境变量。
%CD% - 当前路径名。
%DATE% - 当前⽇期。
%TIME% - 当前时间。
%RANDOM% - 显⽰0 到32767之间的⼀个随机数。你看CMD也是可以获取随机数的。
5.Choice
1. 详细语法:
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
该命令可以提供⽤户⼀个选择列表,并使⽤ERRORLEVEL参数返回⽤户选择项的序号。第⼀项对
于1,第⼆项对应 2,依次类推,如果⽤户按CTRL+C退出⽽不选择,就返回0。
/C    choices  /N
/CS
/T    timeout ⽤字母列出所提供的选项,默认是"YN",即是和否。
隐藏选择列表。如果使⽤这个选项,那么提⽰的⽂字⾥最后写清楚以下。不推荐使⽤。
激活⼤⼩写敏感。默认是对⼤⼩写不敏感。
选择超时设置。
/D    choice
超时后的默认选项。
/M    text
提⽰字符。最好把要选择的问题将清楚。
2. 例⼦:
@echo off
SETLOCAL
CHOICE /C ABC /M "选择登陆⽤户:A - 管理员;B 域⽤户;C注册⽤户"
IF %errorlevel%==1 goto :Admin
IF %errorlevel%==2 goto :Domain
IF %errorlevel%==3 goto :Local
goto Exit
:Admin
echo 欢迎管理员
goto Exit
:Domain
echo 欢迎域⽤户
goto Exit
:Local
echo 欢迎注册⽤户
goto Exit
:Exit
endlocal
6.Rem and Arguments.
1. REM [comment]: 批处理⽂件的注释符,可以使⽤“::” 来代替REM。
2. 参数。
%0对应⽂件名本⾝,其他分别对应⼀个参数值,⽀持255个参数。
< (255)
%0%1%2%3…%n…%255
3. ⽂件名参数扩展。
当使⽤⽂件名作参数的时候,可以使⽤如下⽂件名扩展。下⾯的例⼦扩展%1,其实对所有的参
数都可以进⾏类似的扩展。
%~f1 - 扩展%1 为带路径的全名。 %~d1 - 只显⽰磁盘名称。 %~p1 - 只显⽰⽂件路径。
%~n1 - 只显⽰⽂件名,不包括后缀名,也不包括路径。 %~x1 - 只显⽰后缀名。 %~s1 - 变
成短⽂件名,将包含“~”符号。 %~1 - 有时候⽂件名包含空格是,会对⽂件名加双引号。这个
功能是去掉双引号。 %~a1 - 显⽰⽂件的属性。 %~t1 - 显⽰⽂件的修改时间。 %~z1 - 显⽰
⽂件的⼤⼩。
上⾯的扩展是可以组合的:
%~dp1 - 扩展%1 为磁盘名称和路径名。
%~nx2 - 扩展%2 为⽂件名和⽂件后缀名。
::Test.bat
::Example: test.bat test.bat
@echo off
setlocal
set fn=%~f1
echo %fn%
endlocal
7.IF 语句
1. 详细语法:
File syntax
IF [NOT] EXIST filename command
IF [NOT] EXIST filename (command) ELSE (command)
String syntax
IF [/I] [NOT] item1==item2 command
IF [/I] item1 compare-op item2 command
IF [/I] item1 compare-op item2 (command) ELSE (command)
批处理文件怎么做
Error Check Syntax
IF [NOT] DEFINED variable command
IF [NOT] ERRORLEVEL number command
IF CMDEXTVERSION number command
Key
/I        : ⽐较时不考虑⽂件名⼤⼩写,即⼤⼩写不敏感。
compare-op : 逻辑⽐较
EQU : equal 等于
NEQ : not equal 不等于
LSS : less than ⼩于
LEQ : less than or equal⼩于或等于
GTR : greater than ⼤于
GEQ : greater than or equal⼤于或等于
2. 例⼦(可以看出If语句也是⼀条语句)
IF EXIST filename (del filename) ELSE ( echo The file was not found.)
IF EXIST filename (
del filename
) ELSE (
echo The file was not found.
)
8.For 循环
1. 详细语法:
FOR-Files
FOR %%parameter IN (set) DO command
FOR-Files-Rooted at Path
FOR /R [[drive:]path] %%parameter IN (set) DO command
FOR-Folders
FOR /D %%parameter IN (folder_set) DO command
FOR-List of numbers
FOR /L %%parameter IN (start,step,end) DO command
FOR-File contents
FOR /F ["options"] %%parameter IN (filenameset) DO command
FOR /F ["options"] %%parameter IN ("Text string to process") DO command
FOR-Command Results
FOR /F ["options"] %%parameter IN ('command to process') DO command
eol=c          - ⾏⾸注释符。如果有这个注释符,这⼀⾏不做处理。
skip=n        - 制定前n⾏跳过,不处理
delims=xxx      - 分隔符集合。默认分隔符是空格和Tab。
tokens=x,y,m-n - 选择哪⼀块⽤于循环操作。
usebackq      - 当⽂件名有空格需要使⽤双引号时,使⽤usebackq把双引号内的东西当⽂件处
理,否则当字符串处理。
注意:
在批处理⽂件中,参数使⽤%%parameter,⽽当你拿到命令⾏使⽤的时候,使⽤%parameter,
就是⼀个百分号的区别。同时变量名区分⼤⼩写,所以%g和G是不相同的。
(set) 说明是⽂件集合,⼀个⽂件或多个⽂件,还可以对⽂件名使⽤通配符。
2. 例⼦:
@echo off
setlocal
for %%G in (*.bat *.txt) do echo %%G
endlocal
9.Net.
1. 管理服务: Net start, stop, pause, continue [service]。
2. 连接到⼀个共享⽂件:Net use。
NET USE [磁盘名:] \\共享名称[\⼦⽬录名] [密码] [/USER:[域名\]⽤户名]
NET USE磁盘名:]: /delete
3. Net share: 显⽰本地的所有共享,包括隐藏的共享。
4. Net share ShareName: 显⽰共享的相关信息。
5. 创建⼀个本地共享: NET SHARE sharename=drive:path /REMARK:"text" [/CACHE:Manual | Automatic | No ]
6. 修改⽤户数量限制和标⽰。
NET SHARE sharename /USERS:number /REMARK:"text"
NET SHARE sharename /UNLIMITED /REMARK:"text"
7. 删除共享: NET SHARE {sharename | devicename | drive:path} /DELETE
8. Net view \\计算机名: 列出远程机器的所有共享。
9. Net localgroup: 把⼀个账户加⼊⼀个本地组,如加⼊管理员组:net localgroup administrators DomainName\UserName /add
10. 机器重命名: netdom renamecomputer 原机器名/newname:修改后的机器名/UserD:user/PasswordD:password
11. 加⼊域: net dom join 计算机名/domain:域名 /UserD:域管理员账户 /PasswordD:域管理员密码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。