批处理中的变量, 我把他分为两类, 分别为" 系统变量" 和" 自定义变量"
1 系统变量 :
他们的值由系统将其根据事先定义的条件自动赋值 , 也就是这些变量系统已经给定义了值 ,
不需要我们来给他赋值 , 我们只需要调用而以 ! 我把他们全部列出来 !
%allusersprofile% 本地“ 所有用户” 配置文件的位置。 C:/Documents and Settings/All Users
%appdata% 本地默认情况下应用程序存储数据的位置。 C:/Documents and Settings/Administrator/Application Data
%cd% 本地当前目录字符串。 C:/Documents and Settings/Administrator/ 桌面
%cd:/=//% 本地当前目录字符串。C://Documents and Settings//Administrator// 桌面
%cmdcmdline% 本地用来启动当前的 Cmd.exe 的准确命令行。 cmd /c ""C:/Documents and Settings/Administrator/ 桌面/a.bat" "
%cmdextversion% 系统当前的“ 命令处理程序扩展” 的版本号。2
%computername% 系统计算机的名称。 xxxxx
%comspec% 系统命令行解释器可执行程序的准确路径。 C:/WINDOWS/system32/cmd.exe
%date% 系统当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date 。
%time% 系统当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time 。
%errorlevel% 系统上一条命令的错误代码。通常用非零值表示错误。
%homedrive% 系统连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“ 本地用户和组” 中指定的。 C:
%homepath% 系统用户主目录的完整路径。基于主目录值而设置。用户主目录是在“ 本地用户和组” 中指定的。 /Documents and Settings/Administrator
%homeshare% 系统用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“ 本地用户和组” 中指定的。
%logonserver% 本地验证当前登录会话的域控制器的名称。 //xxxx
%number_of_processors% 系统指定安装在计算机上的处理器的数目。
%os% 系统操作系统名称。Windows 2000 显示其操作系统为 Windows_NT 。 Windows_NT
%path% 系统指定可执行文件的搜索路径。 C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem
%pathext% 系统操作系统认为可执行的文件扩展名的列表。 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
%processor_architecture% 系统处理器的芯片体系结构。值:x86 或 IA64 基于 Itanium x86
%processor_identfier% 系统处理器说明。
%processor_level% 系统计算机上安装的处理器的型号。 15
%processor_revision% 系统处理器的版本号。 4f02
%prompt% 本地当前解释程序的命令提示符设置。由 Cmd.exe 生成。 $P$G
%random% 系统 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 30580
%systemdrive% 系统包含 Windows server operating system 根目录(即系统根目录)的驱动器。 C:
%systemroot% 系统Windows server operating system 根目录的位置。 C:/WINDOWS
%temp% C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp 和 %tmp% C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp 系统和用户对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP ,而其他应用程序则需要 TMP 。
%userdomain% 本地包含用户帐户的域的名称。 xxxxxx
%username% 本地当前登录的用户的名称。 Administrator
%userprofile% 本地当前用户的配置文件的位置。 C:/Documents and Settings/Administrator
%windir% 操作系统目录的位置。 C:/WINDOWS
%programfiles% 程序文件夹的位置。 C:/Program Files
这么多系统变量, 我们如何知道他的值是什么呢 ?
在CMD 里输入 echo %WINDIR%
windir 变量名, 不是随便乱输的 !
这样就能显示一个变量的值了!
举个实际例子, 比如我们要复制文件到当前帐号的启动目录里就可以这样
copy d:/1.bat "%USERPROFILE%/ 「开始」菜单/ 程序/ 启动/"
%USERNAME% 本地 返回当前登录的用户的名称。 注意有空格的目录要用引号引起来
另外还有一些系统变量, 他们是代表一个意思, 或者一个操作!
他们分别是%0 %1 %2 %3 %4 %5 ...... 一直到%9 还有一个%*
%0 这个有点特殊, 有几层意思, 先讲%1-%9 的意思.
%1 返回批处理的第一个参数
%2 返回批处理的第二个参数
%3-%9 依此推类
反回批处理参数? 到底怎么个返回法?
我们看这个例子, 把下面的代码保存为test.BAT 然后放到C 盘下
@echo off
echo %1 %2 %3 %4
echo %1
echo %2
echo %3
echo %4
进入CMD, 输入 cd c:/
然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数
注意中间的空额, 我们会看到这样的结果:
我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数
我是第一个参数
我是第二个参数
我是第三个参数
我是第四个参数
对比下代码,%1 就是我是第一个参数 %2 就是我是第二个参数
怎么样理解了吧!
这些%1 和%9 可以让批处理也能带参数运行, 大大提高批处理功能!
还有一个%* 他是什么呢? 他的作用不是很大, 只是返回参数而已, 不过他是一次返回全部参数
的值, 不用在输入%1 %2 来确定一个个的
例子
@echo off
echo %*
同样保存为test.bat 放到C 盘
进入CMD, 输入 cd c:/
然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数
可以看到他一次把全部参数都显示出来了
好现在开始讲那个比较特殊的%0
%0 这个不是返回参数的值了, 他有两层意思!
第一层意思: 返回批处理所在绝对路径
例子 :
@echo off
echo %0
pause
保存为test.BAT 放在桌面运行, 会显示如下结果
"C:/Documents and Settings/Administrator/ 桌面/test.bat"
他把当前批处理执行的所在路经打印出来了, 这就是返回批处理所在绝对路径的意思
第二层意思: 无限循环执行BAT
例子 :
@echo off
net user
%0
保存为BAT 执行, 他就会无限循环执行net user 这条命令, 直到你手动停止.
以上就是批处理中的一些系统变量, 另外还有一些变量, 他们也表示一些功能 ,
FOR 命令中的那些就是,FOR 变量已经说过, 就不讲了.
2 自定义变量
1. 环境变量的设置有几种方式?
设置环境变量有两种方式:第一种是在命令提示符运行窗口中设置;第二种是通过单击 “ 我的电脑 → 属性 → 高级 ” 标签的 “ 环境变量 ” 按钮设置。需要注意的是,第一种设置环境变量的方式只对当前运行窗口有效,关闭运行窗口后,设置就不起作用了,而第二种设置环境变量的方式则是永久有效。
2. 如何在命令提示符窗口中设置环境变量?
在 “ 开始 → 运行 ” 框中输入 “cmd” 后按 “ 确定 ” 按钮,出现命令运行窗口。在命令提示符下输入 “set” 即可查看环境变量设置。要查看具体某个环境变量的设置,比如要查看 path 环境变量的设置,可以输入 “set path” 。要创建一个环境变量,比如要创建一个名为 aa 的,值为 “c:” 的环境变量,可以输入 “set aa=c:” 命令。而要删除一个环境变量,比如要删除 aa 环境变量,则可输入 “set aa=” 命令(注意 = 后面不能有空格)。如何更改一个环境变量的设置呢?更改环境变量有两种情况:一是追加方式,即在不改变环境变量现有设置的情况下,增加变量的值,比如要给环境变量 aa 增加一个值为 “D:” 的设置,可以输入 “set aa=%path%;D:” 。另一种是完全修改方式,对于这种方式,我们可以采用直接创建一个环境变量的方法来实现。
3. 用户变量和系统变量的关系是什么?
点击 “ 我的电脑 → 属性 → 高级 ” 标签的 “ 环境变量 ” 按钮,出现 “ 环境变量 ” 对话框,如果当前是以 Administrator 登录系统的用户,对话框的上面为 Administrator 的用户变量,对话框的下面为系统变量(即相当于系统中所有用户的用户变量)。有的时候我们会看到在用户变量和系统变量中都存在某一个环境变量,比如 path ,那么 path 的值到底是用户变量中的值还是系统变量中的值,或者两者都不是呢?答案是两者都不是。 path 变量的值是用户变量中的值与系统变量中的值的叠加。
4. 改变环境变量和环境变量中的值应该注意什么?
环境变量和环境变量的值不要含有空格,也不要用中文,切记!
要使用自定义变量就得使用set 命令了, 看例子. 故名思意, 自定义变量就是由我们来给他赋予值的变量
@echo off
set var= 我是值
echo %var%
pause
保存为BAT 执行, 我们会看到CMD 里返回一个 " 我是值"
var 为变量名,= 号右变的是要给变量的值
这就是最简单的一种设置变量的方法了
如果我们想让用户手工输入变量的值, 而不是在代码里指定, 可以用用set 命令的/p 参数
例子:
@echo off
set /p var= 请输入变量的值
echo %var%
pause
var 变量名 = 号右边的是提示语, 不是变量的值
变量的值由我们运行后自己用键盘输入
只键入无参数的SET 命令就可显示当前环境设置。这些设置一般包括COMSPEC 和PATH 环境变量,MS-DOS 用它们帮助在磁盘上寻找程序。PROMPT 、DIRCMD 和COPYCMD 为MS-DOS 使用的其它环境变量。
当使用SET 指定了variable 和string 的值时,MS-DOS 将指定变量及相关字符串加到环境中。如果环境中已有该变量,则用新的字符串代替老的字符串
在创建批处理文件时,可用SET 命令创建环境变量。并将它们与%0 到%9 一样使用。也可将变量%0 到%9 作为SET 命令的输入
从批处理文件中调用环境变量值时,必须用百分符(%) 将变量值括起来
使用 set /? 查看 SET 的帮助我们发现 SET 除了我上面讲的
SET [variable=[string]]
SET /P variable=[promptString]
这两种语法外 , 还有如下几种语法 :
SET /A expression
环境变量替换已如下增强 :
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%
这机种语法有什么用处呢 ? 现在我们来一个个讲解他们 !
SET /A expression
/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作 :
() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
& - 按位“ 与 ”
^ - 按位“ 异 ”
| - 按位“ 或 ”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
上面这些是系统帮助里的内容, 看着是不是有点晕, 没关系我来简单解释一下 :
set 的/A 参数就是让SET 可以支持数学符号进行加减等一些数学运算 !
现在开始举例子介绍这些数学符号的用法 :
看例子 这里的例子请直接在CMD 下拷贝命令运行, 不需要保存为 BAT!
set /a var=1 + 1
set /a 语法, var 变量名 1 + 1 数学式子
拷贝运行后会直接显示一个2, 或者运行完后我们输入echo %var%, 也是二, 这就是
一个简单的加法运算 !
set /a var=2 - 1 结果是多少呢? 如果你看不到结果就 echo %var%.....
set /a var=2 * 2 乘法运算
set /a var=2 / 2 除法运算
set /a var=(1+1) + (1+1) 结果等于4 看得懂吧 !
set /a a=1+1,b=2+1,c=3+1 运行后会显示一个4, 但我们用
echo %a% %b% %c% 后看结果, 会发现其他数学运算也有效果!, 这就是" 斗" 号的
作用 !
有时候我们需要直接在原变量进行加减操作就可以用这种语法
set /a var+=1 这样的语法对应原始语法就是 set /a var = %var% + 1
都是一样的结果, 在原变量的值上在进行数学运算, 不过这样写简单一点
在来一个 :
set /a var*=2
其他都这么用, 只要帮助里有这个语法 !
另外还有一些用逻辑或取余操作符, 这些符号, 按照上面的使用方法会报错的
比如我们在CMD 里输入set /a var=1 & 1 " 与运算", 他并不会显示为1, 而是报错 ,
为什么? 对于这样的" 逻辑或取余操作符", 我们需要把他们用双引号引起来, 看例子
set /a var= 1 "&" 1 这样结果就显示出来了, 其他逻辑或取余操作符用法
set /a var= 1 "+" 1 异运算
set /a var= 1 "%" 1 取模运算
set /a var= 2 "<<" 2 次方运算
set /a var= 4 ">>" 2 这个不太记得数学里的叫法 ....
还有几个数学不太行, 搞不清楚了.... 不列出来了 ,
这些符号也可以用&= ^= |= <<= >>= 这样的简单用法如
set /a var"&=" 1 等于set /a var = %var% "&" 1 注意引号
好符号说到这, 现在说 %PATH:str1=str2%
这个是替换变量值的内容, 看例子
@echo off
set a= bbs.verybat.org
echo 替换前的值 : "%a%"
set var=%a: =%
echo 替换后的值 : "%var%"
pause
对比一下, 我们发现他把变量%a% 的空格给替换掉了, 从这个例子, 我们就可以发现
%PATH:str1=str2% 这个操作就是把变量%PATH% 的里的str1 全部用str2 替换
比如我们把上面的例子改成这样
@echo off
set a=bbs.verybat.org
echo 替换前的值 : "%a%"
set var=%a:.= 伤脑筋 %
echo 替换后的值 : "%var%"
pause
解释set var=%a:.= 伤脑筋 %
set 命令 var 变量名 字a 是要进行字符替换的变量的值,"." 为要替换的值 ,
" 伤脑筋" 为替换后的值 !
执行后就会把变量%a% 里面的"." 全部替换为" 伤脑筋 "
这就是set 的替换字符的很好的功能! 先讲到这
%PATH:~10,5% 这个什么意思, 看例子 :
@echo off
set a=bbs.verybat.org
set var=%a:~1,2%
echo %var%
pause
执行后, 我们会发现只显示了"bs" 两个字母, 我们的变量%a% 的值不是为bbs.verybat.org 吗
怎么只显示了第2 个字母和第3 个字母"bs", 分析一结果我们就可以很容易看出
%PATH:~10,5% 就是显示变量PATH 里指定几位的值 !
分析 set var=%a:~1,2%
set 命令 var 变量值 a 要进行字符操作的变量 "1" 从变量"a" 第几位开始显示 "2" 显示几位
和起来就是把变量a 的值从第一位开始, 把后两位赋予给变量 var
就样因该明白了吧 ~
其他两种语法
%PATH:~-10%
%PATH:~0,-2%
他们也是显示指定变量指定几位的值得的意思
%PATH:~-10% 例子
@echo off
set a=bbs.verybat.org
set var=%a:~-3%
echo %var%
pause
这个就是把变量a 倒数3 位的值给变量 VAR
当然我们也可以改成这样
@echo off
set a=bbs.verybat.org
set var=%a:~3%
echo %var%
pause
这个就是把变量a 的从第3 位开始后面全部的值给变量 VAR
%PATH:~0,-2% 例子
@echo off
set a=bbs.verybat.org
set var=%a:~0,-3%
echo %var%
pause
执行后, 我们发现显示的是"bbs.verybat", 少了 ".cn"
从结果分析, 很容易分析出, 这是把变量a 的值从0 位开始 ,
到倒数第三位之间的值全部赋予给 var
如果改成这样
@echo off
set a=bbs.verybat.org
set var=%a:~2,-3%
echo %var%
pause
那么他就是显示从第2 位开始减去倒数三位字符的值, 并赋予给变量var
PATH 格式 :PATH [ 盘符 1][ 路径 1][;][ 盘符 2][ 路径 2][;...]
1. DOS 命令文件是指扩展名为 .COM 、 .EXE 、 .BAT 的文件 , 也称为可执行文件
2. . 在执行 DOS 外部命令时 ,DOS 首先在当前盘当前目录中寻找该文件 , 若找到 , 则运行 ; 如找不到 ,DOS 就会到 PATH 命令所设置的路径中 , 继续查找该文件 , 以便执行 .
PATH变量的作用就是为了快速的执行所需要的命令设置可执行文件搜索路径