学习有关批处理的一些比较琐碎、但又比较有价值的一些知识,运用这些知识后,才有条件更好的实现的批处理的功能,并能使批处理摆脱黑白世界而显得更加多姿多彩。
(一)环境变量
所谓“环境变量”,实际上就是C语言里面的“变量”的意思。批处理的变量可以分为两类,由系统定义的系统变量和由用户根据需要自定义的用户变量。
【 1、系统变量 】
批处理的一些变量是由操作系统事先定义好的,可以适用于任何批处理,我们称这些特殊的变量为“系统变量”。系统变量有很多个,包括硬件类、操作系统类、文件路径类、系统时间类等。要查看所有的系统变量,请新打开一个cmd窗口,输入set回车即可。对几个比较常用的变量解释如下:
ComputerName 计算机名,即右键 我的电脑--属性--计算机名 选项卡中的“完整的计算机名称”
ComSpec cmd.exe完整路径名
HomeDrive 系统分区盘符,一般都是C盘,故而HomeDrive=C:
Path 可执行文件默认搜索路径。这个东东非常重要!待会儿单独讲解…
ProgramFiles 就是系统的Program Files的路径啦,一般都是C:\Program Files,这就是安装软件时默认的安装路径了
Prompt 个性化设置cmd提示符的必备武器!不过,我没怎么用过~
SystemDrive 包含系统根目录的分区,其实就是HomeDrive了
SystemRoot 系统根目录路径,一般都是C:\WINDOWS
Temp、Tmp 文件、程序等可使用的临时目录,默认是C:\WINDOWS\Temp或Tmp。几乎所有的程序在运行时都会在这个目录里面“临时”写入文件。一般情况下,程序写入的临时文件都应该被该程序删除,可惜的是,大部分的程序都很健忘,导致这个文件夹占据的空间越来越大,自然也就使我们的系统增肥喽。所以,我们要把它修改到其他分区,并且时时的清理里面的临时文件。
UserName 当前用户名,即所登陆的账户名
UserProfile 当前用户的配置目录,一般都是C:\Documents and Settings\%UserName%。默认情况下,我们的桌面就是这个目录下面的“桌面”文件夹;我的文档就是这个目录下面的“My Documents”文件夹。所以啦,往桌面上或我的文档里面放东西就是放到这个文件夹下面了,也就是放到C盘了,重装系统时要覆盖C盘内容的,所以桌面上或我的文档里面的东西当然就会Gone with the Wind了~解决方法有两个,一是保持良好的习惯,不把重要文件放到这两个地方;二是,修改默认设置,将这两个文件夹都移到其他分区。
WinDir 操作系统路径,其实就是SystemRoot了
(二)用户变量
编写批处理程序时,用户根据需要自己定义的变量称之为用户变量。用户变量类似于C语言里面的变量,仅仅在定义该变量的程序中有效。
用户变量由set命令定义,这是批处理中非常非常重要的一个操作,从而使set命令成为批处理里面使用频率最高的几个命令之一。关于set命令的使用,参考set /?,本教程也会在后面对其进行讲解。
【 3、变量引用 】
前面的几节课里面,我们已经看到了如何引用变量,即直接用变量名操作变量,通过"%"或"!"来获取变量的值。其中,只有在for语句里面重复对同一变量多次赋值时才需要使用"!",并且在使用"!"调用变量时,要首先“启用延迟环境变量扩充”,启动命令为:SetLocal EnableDelayedExpansion。另外需要说明的是,“启用延迟环境变量扩充”后,所有的"!"都将被视为“取变量值”的特殊符号,即使用"^!"也不能输出符号"!"。若要输出"!",则需要“停用延迟环境变量扩充”,命令为:SetLocal DisableDelayedExpansion
(三)参数
跟C语言类似,在调用函数或其他批处理时可能需要传递参数。批处理的参数传递分为直接和间接两种传递参数的方法。
【 1、直接传递 】
直接传递参数,即在使用call命令时,不使用任何参数,在子函数或子批处理里面直接对主函数(也称父批处理)里面的变量进行修改。这跟汇编语言里面的参数传递方式类似。
直接传递参数举例:
===============================================
@echo off
setlocal enabledelayedexpansion
set var=aCdehiM,?mnrstW y
echo %var%
call :deal
setlocal disabledelayedexpansion
set var=%var:?=!%
echo %var%
pause>nul
exit
:deal
set tm=!var!
set var=
for %%i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (
set var=!var!!tm:~%%i,1!
)
goto :eof
===============================================
可以发现,当我们把变量var作为参数赋予子函数:deal后,子函数对var的值进行了修改;当子函数返回后,主函数里面的var的值就已经是子函数里面var被修改后的值了。
该例子中,使用了本节课前面讲到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保证了var在for循环里面能够根据我们的意愿进行处理,后者保证了能够正确输出符号"!"。另外例子中还使用了命令set,利用set对字符串进行了处理。还有一个地方使用了语句goto :eof,该语句相当于C语言里面的return或汇编语言里面的RET,即子程序返回命令。需要说明的是,当子函数本身就在批处理文件的末尾的话,我们是可以省略这句话的,比如将此例的goto :eof删除是不会产生任何影响的。
【 2、间接传递 】
间接传递参数,即在使用call命令时,在其后面添加参数,形如call {[:label][ChildBatch]} Parameter1 Parameter2 ... ParameterN。这跟C语言里面传递参数的格式类似。不同于C语言,批处理中的子函数不需要定义形参,更不需要指定参数的个数。传递过来的参数,在子函数或子批处理里面是以%1~%9的形式表示的,即%1~%9分别表示传递过来的第1~9个参数。
===============================================
@echo off
call :deal aaa bbb "c c" ddd eee
pause>nul
exit
:deal
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
===============================================
通过这个例子就可以清晰的看到%n参数表示法的用法。参数列表中包含空格的依旧要用双引号(")引起来;另外,也可以看到,%0已经变成了子函数的标号了,而不是父批处理的文件名全称。
【 3、区别 】
这两种参数传递方法本质上是没有区别的,形式上,直接传递直接对原变量进行操作,丢失了原变量的值;间接传递则通过%n对原变量进行了简单的备份,并且通用性更强,即不限定原变量的名称。另外,使用%n还有一个非常大的好处,就是可以通过%~*i来加强处理变量的能力。关于%~*i,详细内容参见for /?。
针对二者的差别,可以根据情况决定使用哪种传递方式:
--1、作为参数的变量名固定、且在子函数中不需要对其进行备份的情况下,使用直接传递法;
--2、若将子函数作为一个通用的程序模块,以适应于对不同变量的处理,或者作为参数的变量不需要备份时,使用间接传递法。
具体使用哪种方法,还需根据实际情况或使用习惯进行选择。
(四)返回值
有些命令在执行之后将会返回一定的错误值(errorlevel),可以通过errorlevel的值判断命令执行的状况。这点类似于C语言里面的exit(num),num就是错误代码。
获取返回值errorlevel的方法就是,在执行命令后,立马调用返回值errorlevel,如echo %errorlevel%或者if %errorlevel%==1等命令。
errorlevel举例:
===============================================
@echo off
reg add HKCU /v try /f>nul
reg delete HKCU /v try /f
if errorlevel 0 (echo 删除成功!) else (echo 删除失败!)
reg delete HKCU /v try /f
if %errorlevel%==0 (echo 删除成功!) else (echo 删除失败!)
pause>nul
===============================================
上面例子中,由于第一成功的删除了注册表,导致第二次因为找不到注册表而宣告失败。同时我们也看到了errorlevel的使用方法,即if errorlevel 0和if %errorlevel%==0是一样的。也许你注意到了,里面还有个笑脸呢~O(∩_∩)O哈哈~这就是ASCII码啦,后面跟你讲啊…
一般情况下,程序或命令成功执行时,返回的errorlevel是0,错误时返回1或更高的值。当然,有些命令是没有返回值的,这点需要注意。
嗯,有没有想起前面有个类似的东西啊?对了,那就是||和&&了,这两个符号就是根据errorlevel的值来进行逻辑判断的~
(五)用户交互
批处理,黑框白字是它最著名的特征。虽然当初DOS为人们使用计算机做出了莫大的贡献,但在Windows盛行的今天,人们已经疏远并且惧怕那个黑色的窗口了。微软为了让先天有着批量处理“体力活”能力的DOS避免“冷酷”,便于接近,特意提供了几个小命令,加强批处理的用户交互功能。
【 1、视窗 】
首先我们要DIY它的窗口。使用命令:color、mode、msg。
--1、设置窗口背景色和字体颜色by color。详细内容参见color /?。
--2、设置窗口大小by "MODE CON [COLS=c] [LINES=n]",cols即宽度,lines即高度。
--3、GUI交互窗口by msg。详细内容参见msg /?。
视窗DIY举例:
===============================================
@echo off
set a=10
set b=0
:tex
set /a a+=3
set /a b+=1
mode con cols=%a% lines=%b%
if %a% lss 60 goto :tex
echo O(∩_∩)O 圣诞快乐 O(∩_∩)O
set a=15,a6,2e,d0,34,8b,4f,9d,5e
for %%i in (%a%) do (
ping -n 2 127.1>nul
color %%i
)
for %%i in (%a%,%a%) do (
ping -n 1 127.1>nul
color %%i
)
>>ms.txt echo */. . . * .
>>ms.txt echo .\* . [] * __
>>ms.txt echo */ . ./\~~~~~~~~~~~~'\. ^|◆
>>ms.txt echo \* ,/,..,\,...........,\.◆
>>ms.txt echo ^|^| ..▎# ▎田 田 ▎ ^| ▎◆
>>ms.txt echo ^|^| ^&^&▎ ▎ ▎'^|'▎ o
>>ms.txt echo ^|^| ##■■■■■■■■■■〓
msg %username% /w /time:3600 <ms.txt
del ms.txt
pause
===============================================
【 2、声音 】
呵呵,是不是注意到了批处理没有声音呐?闲话不说,直接做实验吧 ^_^
===============================================
@echo off
echo 做好准备,响了啊!!
pause
cls
echo
echo 怎么样?呵呵,刺激吧~
pause
cls
mshta vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")(window.close)
pause
===============================================
此处,这个就是调用vbs的方法:vbscript:createobject("sapi.spvoice").speak("Merry Christmas and Happy New Year!")
speak 好像不能讲中文呐~
其实不然,如果tts安装了中文引擎是可以讲中文的。
【 3、控制 】
在运行批处理的过程中,我们如何干预批处理呢?呵呵,直接点叉叉就可以结束它了!嗯,不错,不过,太野蛮了~
--1、暂停批处理:直接按键盘上的Pause键喽
--2、终止批处理:组合键Ctrl+C。不过,有时候它好像响应的不太积极啊…
(六)ASCII码
前面的例子中,我们已经使用过一次ASCII码了,也就是那个笑脸。ASCII码是图形化的符号,可以用来点缀我们的批处理的。
在cmd窗口中我们可以通过任意一个字符的ASCII码来输入该字符,比如Ctrl+G、Ctrl+N等,字母a-z对应ASCII码的97-122。对于ASCII码大于26的字符,可以通过这个方法来输入:按住Alt键不松,通过小键盘输入ASCII码的十进制值,松开Alt键即可。
[编辑本段]批处理文件的应用
批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。
1、 REM
REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。例:
REM 你现在看到的就是注解,这一句将不会被执行。在以后的例子中解释的内容都REM 会放在REM后面。请大家注意。
2、 ECHO
ECHO 是一个回显命令主要参数有OFF和 ON,一般用ECHO message来显示一个特定的消息 。例:
Echo off
Rem 以上代表关闭回显即不显示所执行的命令
Echo 这个就是消息。
Rem 以上代表显示“这就是消息”这列字符
执行结果:
C:\>ECHO.BAT
这个就是消息。
3、 GOTO
GOTO 即为跳转的意思。在批处理中允许以“:XXX”来构建一个标号然后用GOTO :标号直接来执行标号后的命令。例
:LABEL
REM 上面就是名为LABEL的标号。
DIR C:\
DIR D:\
GOTO LABEL
REM 以上程序跳转标号LABEL处继续执行。
4、CALL
CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例:
批处理2.BAT内容如下:
ECHO 这就是2的内容
批处理1.BAT内容如下:
ECHO 这是1的内容
CALL 2.BAT
ECHO 1和2的内容全部显示完成
执行结果如下:
C:\>1.BAT
这是1的内容
这就是2的内容
1和2的内容全部显示完成
5、PAUSE
PAUSE 停止系统命令的执行并显示下面的内容。例:
C:\> PAUSE
请按任意键继续 . . .
6、 IF
IF 条件判断语句,语法格式如下:
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
说明:
[NOT] 将返回的结果取反值即“如果没有”的意思。
ERRORLEVEL 是命令执行完成后返回的退出值
Number 退出值的数字取值范围0~255。判断时值的排列顺序应该又大到小。返回的值大于或等于指定的值时条件成立。
string1==string2 string1和string2都为字符的数据,英文字符的大小写将看做不同,这个条件中的等于号必须是2个(绝对相等),条件想等后即执行后面的 command
EXIST filename 为文件或目录存在的意思。
IF ERRORLEVEL这条语句必须放在某一个命令后面。执行命令后由IF ERRORLEVEL来判断命令的返回值。
分享到:
相关推荐
#### 批处理概念方法简介 1. **环境变量**:系统定义的变量,如`PATH`、`TEMP`等。 - 示例:`echo %PATH%` 2. **用户变量**:用户自定义的变量。 - 示例:`set myvar=myvalue` 3. **参数**:传递给批处理脚本的...
Window 批处理命令学习笔记是关于 Window 批处理命令的学习笔记,介绍了批处理文件的基本概念、内部命令、语法和使用方法。 一、批处理文件的基本概念 批处理文件是无格式的文本文件,本质就是一堆 DOS 命令按...
#### 一、批处理概念与特点 **批处理**是一种用于自动执行一系列命令的脚本语言,在计算机操作系统中扮演着重要角色。它通过编写一系列指令来实现对系统的批量操作,极大地提高了工作效率。在本文中,我们将深入...
#### 第一节:常用批处理内部命令简介 1. **REM和::**:REM用于在批处理文件中添加注释,而::是REM的简写形式。 2. **ECHO和@**:ECHO命令用于显示消息或启用和禁用命令回显。@符号用于禁止命令回显,即不显示该...
#### 二、PDF批处理基础概念 PDF批处理是指对多个PDF文件执行一系列预定义操作的过程。这些操作可能包括但不限于:合并多个PDF文件、分割PDF文件、转换文件格式、添加水印等。批处理技术可以极大地提高工作效率,...
#### 八、概念方法 - **变量**:批处理脚本中可以定义并使用变量存储数据,变量可以通过`set`命令设置值。 - **函数**:批处理脚本不直接支持函数的概念,但可以通过`call`命令实现类似的功能。 - **错误处理**:...
批处理脚本简介 批处理脚本是一种在Windows操作系统中使用的脚本语言,通过一系列命令行指令来实现自动化任务的执行。它通常用于系统维护、文件操作等场景,能够简化重复性工作,提高工作效率。 #### 2. 后门程序...
#### 批处理简介 批处理,作为一种脚本语言,在计算机领域扮演着重要的角色。其本质是一系列DOS命令的有序组合,以实现特定的功能或任务自动化。批处理文件通常以`.bat`作为扩展名,运行在DOS环境下。本文将从...
#### 一、VBS与批处理的基本概念 - **VBS(Visual Basic Script Edition)**:是微软开发的一种脚本语言环境,基于VBScript,主要用于编写Windows系统上的小工具或脚本程序。 - **批处理**:是一种在操作系统上执行...
通过上述示例,我们可以看到使用BAT批处理脚本来实现Fibonacci函数的方法。虽然这种方法在效率上可能不如高级语言如Python或C++,但对于简单的数学问题和自动化任务而言,已经足够高效。此外,这种实现方式也为学习...
#### 一、JDBC简介 JDBC,全称为Java DataBase Connectivity(Java数据库连接),是Sun公司(现已被Oracle收购)为了解决不同数据库间的操作差异性而设计的一套标准API。通过这一套标准,开发者能够以统一的方式...
- **BT5简介**:BT5,即BackTrack 5,是一款基于Linux的操作系统,专为渗透测试和安全评估设计。它包含了大量安全相关的工具,适用于网络安全审计、漏洞扫描等场景。在文档中提到,BT5相较于其他系统具有更强的稳定...
“用批处理解决数学问题.txt”可能介绍了一种利用批处理脚本处理数学计算的方法,比如使用批处理进行算术运算或解析数学表达式。 最后,“批处理内部命令简介.txt”是对DOS中内置命令的概述,包括常用的`copy`、`...
#### DOS批处理教程及常用批处理内部命令简介 在计算机操作领域,批处理(Batch file)是一种脚本文件,主要用于执行一系列预定义好的命令或程序,通常用于自动化日常任务,简化复杂操作流程。本文将详细介绍批处理...
批处理脚本简介 批处理脚本是一种由一系列命令组成的文本文件,它可以在Windows操作系统中被解释执行。这种脚本语言非常适用于自动化一些重复性高的任务,比如定时备份数据、清理临时文件等。本文将详细解析如何...
- **批处理离散时间估计**:批处理方法是指将所有可用的数据一次性处理,以获得最优估计。书中讨论了批处理离散时间估计的方法,包括最大后验概率估计(MAP)、贝叶斯推断等。 - **递归离散时间平滑**:递归方法是指...
`laravel-batched-migrations`是一个关于如何在Laravel中实现批处理迁移的概念,它有助于确保迁移操作的唯一性和顺序性,尤其是在多开发环境协作时。让我们深入探讨这个话题。 ### 一、Laravel迁移简介 Laravel的...
- JDBC API简介:了解JDBC的基本概念,如DriverManager、Connection、Statement和ResultSet等。 - 数据库连接:如何加载数据库驱动,建立数据库连接。 - SQL语句执行:使用Statement对象执行SQL查询、插入、更新...
第8章探讨Lambda体系结构的实现方法,讲解如何 将批处理机制和实时处理引擎结合起来构建一个可 纠错的分析系统;第9章讲解如何将Pig脚本转化为 topology,并且使用Storm-YARN部署topology,从 而将批处理系统转化为...
3. 掌握大数据 HDFS、HBase、Hadoop 集群搭建及数据批处理。 4. 掌握离线工具 ETL 和 Hive 的安装及应用。 5. 掌握数据可视化的应用。 能力目标 本课程的能力目标包括: 1. 全局的眼光理解大数据,理解大数据的...