博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dos编程详解
阅读量:4097 次
发布时间:2019-05-25

本文共 3665 字,大约阅读时间需要 12 分钟。

dos的用法

在命令行中查看帮助 command /?  例如:   for /?  ,  set /? , mkdir /?

复制:copy,删除:del,

文本输出到文件 echo abcd >> demo.txt

(1)自定义变量

@echo off  set name= aliceset age= 3echo %name% is about %age% years old  pause

结果:alice is about 3   years old

关键是set命令的使用,set var=变量值,var是变量的名称,当需要在其它地方使用这个变量时,需要用两个%括起来,如%var%

注意:变量赋值时候,变量与等号之间不能有空格, @表示当前行不显示命令,只显示结果

(2)变量的算术运算

在进行算术运算时,我们需要给set命令加上 /a 参数,后面再跟表达式。

例如:

set var=100  set /a var=200+10  set /a var+=15  echo %var%

运行结果为225

这里的var+=15 相当于 var=%var%+15

(3)变量的逻辑运算与取余运算

需要将运算符用双引号表示出来:

set /a var=3 "&"7  set /a var=2 "^"6  set /a var=2 "<<"3  set /a var=256 ">>"2  set /a var=83 "%"10

批处理支持的运算符按优先权顺序:

()                   - 分组
! ~ -                - 一元运算符
* / %                - 算数运算符
+ -                  - 算数运算符
<< >>                - 逻辑移位
&                    - 按位“与”
^                    - 按位“异”
|                    - 按位“或”
= *= /= %= += -=     - 复合赋值运算符
&= ^= |= <<= >>=     - 复合赋值运算符
,                    - 表达式分隔符

表达式分隔符的作用是在一行中写多个表达式,例如:

(4)变量的高级特性:变量延时

例1:

@echo off set a=4 set a=5 & echo %a% pause

结果:4

解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?
让我们先了解一下批处理运行命令的机制:
    批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在读取某行命令时,如果其中有变量,则变量值应该取 上一行的值。所以在读取命令“set a=5 & echo %a%”时,dos将其预处理为“set a=5 & echo 4”,然后执行。而其中的a=5所做的数值变更,只能在下一命令行才能体现了。
    为了能够及时感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而是边执行边赋值。

例2:

@echo off setlocal enabledelayedexpansion set a=4 set a=5 & echo !a! pause

结果:5

解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是 "setlocal enabledelayedexpansion "
并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。

 

(5)字符串的截取

两个%%引起来的部分作为注释,变量也用%%引起来,若echo %var%,其中var没有定义,则输出“ECHO 处于关闭状态。”若启用了变量延时,则 !! %% 等价,没有启用延时,则 !!  无效

 

@echo offsetlocal enabledelayedexpansion  set str=123456789echo 第一个字符为:%str:~0,1%echo 头两个字符为:%str:~0,2%echo 头5个字符为:%str:~0,5%echo 去掉最后一个字符后的字符串为:%str:~0,-1%echo 去掉最后3个字符后的字符串为:%str:~0,-3%echo 第4个字符为:%str:~3,1%echo 第4个及其之后的3个字符为:%str:~3,4%echo 最后一个字符为:%str:~-1%echo 最后一个字符为:%str:~-1,1%echo 倒数第4个字符为:%str:~-4,1%echo 倒数第4个及其之后的2个字符为:%str:~-4,3%echo 倒数第4个及其之后的字符为:%str:~-4%%注释若启用了变量延时,用叹号引起来变量与用百分号一起来等价 %echo 倒数第4个及其之后的2个字符为:!str:~-4,3!echo 倒数第4个及其之后的字符为:!str:~-4!pause

(5)for语句的用法 (dos自带的帮助文档:for /?)

格式:FOR [参数] %%变量名 IN (相关文件或命令)   DO 执行的命令   

注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.  

关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r   

1,无参数

格式:FOR %%variable IN (set) DO command 

打印当前目录所有的 .txt 文件: for %%i in (*.txt) do echo %%i 

2,参数 “/d” (显示当前目录下的目录名字)

格式:FOR /D %variable IN (set) DO command [command-parameters]  

 

  1.  for /d %%i in (c:/*) do echo %%i  --显示c盘根目录下的所有目录   
  2.  for /d %%i in (???) do echo %%i  --显示当前目录下名字只有1-3个字母的目录   

3,参数 “/r” (r:递归搜索,搜索指定路径及所有子目录中与set相符合的所有文件)

格式:FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]   

此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。   

1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。   

2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。  

例:for /r d:/ %%i in (*.exe) do echo %%i --把D盘根目录,和每个目录的子目录下面全部的exe文件都列出来

 4,参数 “/l” (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)

 

  1. 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]   
  2. 该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step   
  •  示例:   
  1.   for /l %%i in (1,1,5) do @echo %%i  --输出1 2 3 4 5   
  2.   for /l %%i in (1,2,10) do @echo %%i  --输出1,3,5,7,9    
  3.   for /l %%i in (100,-20,1) do @echo %%i  --输出100,80,60,40,20   
  4.   for /l %%i in (1,1,5) do start cmd  --打开5个CMD窗口   
  5.   for /l %%i in (1,1,5) do md %%i  --建立从1~5共5个文件夹   
  6.   for /l %%i in (1,1,5) do rd /q %%i  --删除从1~5共5个文件夹   

dos中的注释

在批处理中,段注释有一种比较常用的方法:

    goto start

     = 可以是多行文本,可以是命令
     = 可以包含重定向符号和其他特殊字符
     = 只要不包含 :start 这一行,就都是注释
    :start

另外,还有其他各种注释形式,比如:
 

   1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)

    2、rem 注释内容(不能出现重定向符号和管道符号)
    3、echo 注释内容(不能出现重定向符号和管道符号)〉nul
    4、if not exist nul 注释内容(不能出现重定向符号和管道符号)
    5、:注释内容(注释文本不能与已有标签重名)
    6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
    7、goto 标签 注释内容(可以用作说明goto的条件和执行内容)
    8、:标签 注释内容(可以用作标签下方段的执行内容)

 

 

 

 

转载地址:http://zrqii.baihongyu.com/

你可能感兴趣的文章
Spring MVC中使用Thymeleaf模板引擎
查看>>
Spring Boot构建简单的微博应用
查看>>
Spring处理表单提交
查看>>
Spring MVC异常处理
查看>>
Leetcode 1180. Count Substrings with Only One Distinct Letter [Python]
查看>>
PHP 7 的五大新特性
查看>>
php使用 memcache 来存储 session
查看>>
php实现socket(转)
查看>>
PHP底层的运行机制与原理
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
PHP7新特性 What will be in PHP 7/PHPNG
查看>>
比较strtr, str_replace和preg_replace三个函数的效率
查看>>
ubuntu 下编译PHP5.5.7问题:configure: error: freetype.h not found.
查看>>
PHP编译configure时常见错误 debian centos
查看>>
configure: error: Please reinstall the BZip2 distribution
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
【增强学习在无人驾驶中的应用】
查看>>
《python+opencv实践》四、图像特征提取与描述——29理解图像特征
查看>>