DOS批处理高级教程(三) : 批处理变量和set命令详解

来源:互联网 发布:编写手机app软件 编辑:程序博客网 时间:2024/06/08 04:37

前言

这里主要是带着过一下相关的简单概念和用法, 是对于有一定的基础和编写脚本经验的同学而言, 那么一般下面的用法都是一眼看出作用和原理起到一个复习的作用。对于不熟悉的可以查询相关命令和百度即可。

第四章 批处理中的变量

批处理中的变量,我把他分为两类,分别为”系统变量”和”自定义变量”

一、系统变量

他们的值由系统将其根据事先定义的条件自动赋值,也就是这些变量系统已经给他们定义了值,
不需要我们来给他赋值,我们只需要调用而以!


  • %ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
  • %APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
  • %CD% 本地 返回当前目录字符串。
  • %CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
  • %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
  • %COMPUTERNAME% 系统 返回计算机的名称。
  • %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
  • %DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关
  • date 命令的详细信息,请参阅 Date。
  • %ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。
  • %HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
  • %HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
  • %HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是

在“本地用户和组”中指定的。

  • %LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
  • %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
  • %OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
  • %PATH% 系统 指定可执行文件的搜索路径。
  • %PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
  • %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于
    Itanium
  • %PROCESSOR_IDENTFIER% 系统 返回处理器说明。
  • %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
  • %PROCESSOR_REVISION% 系统 返回处理器的版本号。
  • %PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
  • %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
  • %SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)
    NOTE : echo %WINDIR% 这样就能显示一个变量的值
  • 二、自定义变量

    故名思意,自定义变量就是由我们来给他赋予值的变量

    要使用自定义变量就得使用set命令了,看例子.

    @echo offset var=我是值echo %var%pause

    保存为BAT执行,我们会看到CMD里返回一个 “我是值”

    var为变量名,=号右变的是要给变量的值
    这就是最简单的一种设置变量的方法了

    如果我们想让用户手工输入变量的值,而不是在代码里指定,可以用用set命令的/p参数

    例子:

    @echo offset /p var=请输入变量的值echo %var%pause

    var变量名 =号右边的是提示语,不是变量的值
    变量的值由我们运行后自己用键盘输入!

    第五章 set命令详解

    简单的介绍了一下SET设置自定义变量的作用,现在我来具体讲一下set的其他功能.

    一、用set命令设置自定义变量

    前面已有部分应用, 这里就不加赘述了

    set /p 是命令语法 var是变量名 =号右边的”请输入变量的值: “,这个是提示语,不是变量的值了!
    运行后,我们在提示语后面直接输入1,就会显示一行您输入了 1 ~_~

    好了,先回顾到这,现在讲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命令进行简单计算

    语法:SET /A expression
    /A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
    评估器很简单并以递减的优先权顺序支持下列操作:
    () -分组
    ! ~ - -一元运算符
    * / % -算数运算符
    + - -算数运算符
    << >> -二进制逻辑移位
    & -二进制按位“与”
    ^ -二进制按位“异”
    | -二进制按位“或”
    = *= /= %= += -= -算数赋值
    &= ^= |= <<= >>= -二进制运算赋值
    , -表达式分隔符

      @echo off  set /p input=请输入计算表达式:  set /a var=%input%  echo 计算结果:%input%=%var%  pause

    三、用set命令进行字符串处理

    1、字符串替换

    好了,符号说到这,现在说%PATH:str1=str2%
    上面语法的意思就是:将字符串变量%PATH%中的str1替换为str2
    这个是替换变量值的内容,看例子

    @echo offset a= bbs. verybat. cnecho 替换前的值: "%a%"set var=%a: =%echo 替换后的值: "%var%"pause

    请注意:字符串的替换和截取功能在引用变量的地方均可以,并不一定必须要有set命令 例: @echo off set
    a=bbs.verybat.cn echo 替换前的值: “%a%” echo 替换后的值: “%a:.=伤脑筋%” pause
    此例在echo语句中就替换了字符串,效果一样。

    2、字符串截取

    a=bbs.verybat.cn
    %a:~1,2% =“bs” 偏移量1,从第二位开始向右取2位
    %a:~-3% =“.cn” 偏移量负3,即倒数3位(也可理解为留下右边3位),右取全部
    %a:~3% =“.verybat.cn” 偏移量3(也可理解为去掉左边3位),右取全部
    %a:~0,-3% =“bbs.verybat” 偏移量0,右取长度至负3,即倒数3位
    %a:~2,-3% =“s.verybat” 偏移量2,右取长度至负3,即倒数3位


    所以,截取功能统一语法格式为: %a:~[m[,n]]%


    方括号表示可选,%a%为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)
    上面所述用法其实相当于vbs函数mid、left、right
    %a:~0,n% 相当于函数left(a,n) 取左边n位
    %a:~-m% 相当于函数right(a,m) 取右边m位
    %a:~m,n% 相当于函数mid(a,m+1,n) 从m+1位开始取n位
    %a:~m,-n% 相当于函数mid(a,m+1,len(a)-m-n),从m+1位开始,至倒数n+1位
    %a:~m % 相当于函数mid(a,m+1,len(a)-m) 或者right(a,len(a)-m),从m+1位开始取右边全部。

    思考题目:输入任意字符串,求字符串的长度

    @echo offset /p str=请输入任意长度的字符串:echo 你输入了字符串:"%str%"call :stringlenth "%str%" numecho 字符串长度为:%num%pauseexit
    :StringLenth.bat::---------字符串长度计算子程序::---------参数%1为字符串(如有空格,请用引号括起来)::---------参数%2为返回变量名称,不能含空格或特殊字符::@echo offset theString=%~1if not defined theString goto :eofset Return=0:StringLenth_continueset /a Return+=1set thestring=%thestring:~0,-1%if defined thestring goto StringLenth_continueif not "%2"=="" set %2=%Return%goto :eof

    后记

    结束了变量和set命令的讲解, 一般这些内容已经能满足日常的需要了, 在后面, 我们将介绍DOS高级编程的一些基本例子并熟悉DOS

    参考文章 :
    DOS批处理教程

    0 0
    原创粉丝点击