转 BAT CMD 批处理文件脚本总结(中文)

1.               综述

1、”.bat”: 这是微软的第一个批处理文件的后缀名,在几乎所有的Windows 操作系统内都能运行。

2、 “.cmd”: 是为Windows NT 设计的命令行脚本, 为Cmd.exe 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. (参考百度:http://baike.baidu.com/view/2923132.htm


代码


结果


@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

REM 这个文件会创建World.txt到本地磁盘,文件内容为Hello。

REM 也就是第二次运行的时候,脱字符没有发挥作用。

SETLOCAL

Set _html= Hello^>World.txt

Echo %_html%

ENDLOCAL


@echo off

REM 这个文件会输出Hello>World.txt,脱字符一直产生作用。

SETLOCAL EnableDelayedExpansion

Set _html= Hello^>World.txt

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

否则我们要输出一个文件,只能使用Type test.txt了。命令扩展默认是开启的。

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

/D    choice

/M    text


用字母列出所提供的选项,默认是"YN",即是和否。

隐藏选择列表。如果使用这个选项,那么提示的文字里最后写清楚以下。不推荐使用。

激活大小写敏感。默认是对大小写不敏感。

选择超时设置。

超时后的默认选项。

提示字符。最好把要选择的问题将清楚。

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个参数。


Test.cmd


1


2


3



n



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:域管理员密码

时间: 2024-08-26 14:23:42

转 BAT CMD 批处理文件脚本总结(中文)的相关文章

【bat/cmd】脚本开发

0. 开篇 bat/cmd 均是window操作系统下,两者都是通过文本方式编辑,创建以及查看.均是命令的集合.bat与cmd有什么区别呢 ? 1) cmd文件允许使用的命令比bat多,但是只有在windows2000以上的系统中才能运行 2) bat 文件允许使用的命令比cmd少,但是没有系统上的限制 3) cmd文件 "Windows NT命令脚本",bat 文件"MS DOS批处理文件" 4) 文件扩展名不同,cmd文件是".cmd",ba

BAT&amp;nbsp;批处理脚本教程(如果可以用电脑让事情变的更简单,何不让它变得更简单呢!)

第一章 批处理基础 第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令. 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程. 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到非常BAT!" pause 把上面的3条命令保存为文件test.bat或者test.cmd然后执行, 他就会在屏幕上显示以下二

Zabbix_server执行window脚本出现中文乱码如何解决

场景分析: A企业员工啊旺在zabbix_server上,执行了一个通过agent调用远程window主机脚本的操作,但是由于该脚本的输出结果带有中文,啊旺在zabbix_server的界面看到的内容是一串乱码字符,他根本不知道远程脚本是否执行成功.于是他想把脚本的输出结果改成英文提示success或者error.但由于该脚本不是由啊旺编写的.所以他不知道应该修改脚本的那个位置,才能使显示为英文.因此,本文的目的就是为了解决,zabbix_server调用window的远程脚本带有中文的显示乱码

.net 服务 安装 卸载 命令行 bat cmd

基于.net 4.0 安装 @ECHO OFF echo 准备安装服务 pause REM The following directory is for .NET 4.0 set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319 set PATH=%PATH%;%DOTNETFX2% echo 安装服务... echo --------------------------------------------------- Inst

基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案

基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器进行设置之类的,结果没有一个有效果,暑假学习了用Dos来开发Java程序,输入cmd命令中dir(directory)进行查询操作时,显示了一堆中文乱码,原本是想重装系统的,因为电脑里面重要东西有点多,所以自己花了一段时间捣鼓了一下电脑,终于解决了如上两个问题,现在心里很开心,附上如下两幅图: cm

CMD 删除脚本

CMD 删除脚本 forfiles /p D:\BACKUP\WindowsImageBackup /s /m *.* /d -14 /c "cmd /c del @file";  注解: forfiles # 可以理解为赋值变量 /p # 指定的路径 D:\BACKUP\WindowsImageBackup # 指定删除路径 /s # 包括子目录 /m # 查找的文件名掩码 *.* # 删除的文件*.*代表全部 /d # 指定日期,有结对日期和相对日期,此处-14指定当前日期的14天

Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行

Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行 2016年01月03日 17:36:00 持之以恒 阅读数:5520 标签: windows定时任务.bat 更多 个人分类: 定时任务 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq1355541448/article/details/50451607 一.首先进行任务管理器设置  每隔1分钟执行.BAT 文件配置 首先Windows Serv

Bat 文件(批处理文件) 语法

BAT批处理文件语法之常用命令和参数 常用命令 echo.@.call.pause.rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起. ==== 注 =========== 首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用

bat 服务启动脚本

当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用不着每次都启动服务管理器,再去找需要关闭的服务再点击操作了.使用bat语言的net start 或 net stop 即可操作服务的启动或停止,我的脚本如下: @echo off ::以管理员的身份开始执行文件 cd /d %~dp0 %1 start "" mshta vbscript: