11111 11111
E:\\>pause 请按任意键继续. . . 请按任意键继续. . .
但是这里的 E:\\>echo off 这个又该如何不显示呢?这里我们就用到了 @echo off 这个是批处理中几乎都用的,这个一般都写在批处理文件的第一行。 懂得了基本的那就继续:
1. 用echo来输出空行:格式 echo.(echo后加个点,相当于空格键)这里的点可以用,:;”/[\\]+等任一符号替代。
2. 用echo答复命令中的提问:格式 echo 答复语|命令
例如:我们删除文件 del e:\\1.txt 会出现确认信息,我们可以用 echo y|del e:\\1.txt 来提前回答。当然了这道题我们可以用参数解决更方便。再如echo.相当于回车:在dos窗口下输入echo.|time 这样就不要求你再输入新的日期了
3. 用echo想文本文档中添加内容:echo 内容>>路径文件名 还有一些我也没看懂,貌似不常用(还是得写出来以后再看): 4. 向打印机输出打印内容或打印控制码
格式:ECHO 打印机控制码>PRN 和 ECHO 打印内容>PRN
下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推:
C:>ECHO +156+42+116>PRN(输入下划线命令FS*t) C:>ECHO +155@>PRN(输入初始化命令ESC@) C:>ECHO.>PRN(换行)
5. 使喇叭鸣响 C:>ECHO ^G
“^G”是用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。
6. 执行ESC控制序列修改屏幕和键盘设置
我们知道DOS的设备驱动程序ANSI.SYS提供了一套用来修改屏幕和键盘设置的ESC控制序列。如执行下述内容的批处理程序可以把功能键F12定义为DOS命令“DIR/W”,并把屏幕颜色修改为白色字符蓝色背景。
@ECHO”←[0;134;”DIR/W”;13p @ECHO”←[1;37;44m
(注:批处理文件中“←”字符的输入方法是在编辑状态下按Alt中小键盘上的27)
这里在说下@的用法:他其实和echo off 很像,但是@只能影藏单行的命令源代码。而echo off是影藏以下全部。
十三. rem 作用:后面的内容起注释作用
没什么好说的就是用来注释的,不起任何命令作用。 当然了还有很多的注释方法如:
1.rem 内容 2.echo 内容>nul
3.:: 内容(是两个英文冒号)
十四. exit 退出(没什么好说的) EXIT [/B] [exitCode]
/B 指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个 批处理脚本外执行,则会退出 CMD.EXE
exitCode 指定一个数字号码。如果指定了 /B,将 ERRORLEVEL 设成那个数字。如果退出 CMD.EXE,则用那个数字设置 过程退出代码。
作业:1.用批处理输出:123456
2.用 echo 在e:\\下建立1.txt文件并不显示提示信息(有点抠之前的内容) 答案:1.在批处理文件中输入: 2.在批处理文件中输入: @echo off @echo off
echo 123456 echo 2>e:\\1.txt>nul
pause rem之前的用任意内容+空格+2以上10以下
rem的数字+>test.txt来建立文件和nul的用法
pause
自学批处理笔记(7) set
十四. set 定义变量 参数:/a /p
没有参数时:set 变量名=变量内容
直接键入\会显示系统化境变量及当前环境变量
可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配 SET 命令已使用的名称的所有变量的值。例如: SET P
会显示所有以字母 P 打头的变量
如果在当前环境中找不到该变量名称, SET 命令将把 ERRORLEVEL设置成 1。
注意:1.SET 命令不允许变量名含有等号。
2.赋空值: set \
3..养成好的习惯,以免多赋值一个空格出错. 比如: set str=abc 时加上一对双引号 set \
set 常用的两个带参数格式:set /a 表达式
set /p 变量=(提示) (一) set /a
/A 命令选项指定等号右边的字符串为被评估的数字表达式。该表达式 评估器很简单并以递减的优先权顺序支持下列操作:
() - 分组(这个就是数学中的括号) * / % - 算数运算符 + - - 算数运算符 << >> - 逻辑移位 & - 按位“与” ^ - 按位“异” | - 按位“或” = *= /= %= += -= - 赋值 &= ^= |= <<= >>= , - 表达式分隔符
下面来介绍一下这些符号的用法。*是乘号 /是除号 没什么好说的。但是这个%提一下,在批处理文件中我们不是用%而是用%%
是用来求余用的。举个例子: @echo off
set /a num=6%%4
echo %num% rem这里的%num%是调用变量num,以后使用变量都用%变量名% pause
这样结果就是输出了2。关于求余再举几个例子,毕竟与有的编程里的求余不一样:10%%(-3)=1 ;(-10)%%3= -1
百度提问了一下发现:取余符号第二个操作数只能是正数,负数的话会自动取绝对值后再执行计算。 再看看逻辑位移:注意在批处理中或命令行下要加上一对双引号\或用^对<,>进行转义. 例如:set /a a=15\%a%就等于30
这是因为:15=bin(00 00000 00000 00000 00000 00000 01111) 左移1位就成了bin(0 00000 00000 00000 00000 00000 011110)
而bin(0 00000 00000 00000 00000 00000 011110)=2^4+2^3+2^2+2^1=30 <<,>> 逻辑移位.用途是使二进制向左或向右移位. 如十进制20的二进制是1 0100, 向左移一位10 1000,向右移一位01 010. 无符号数用0填充空出来的高位.
我们发现,左移一位后的二进制10 1000转换成十进制后正好是20*2的值, 而右移一位后01 010的十进制也刚好是20/2的值.
不要写成了set str=”a” 这样str的值是”a”(包含了双引号)
因为移位的速度非常快,在计算中如遇到*2或/2的时候不如这样写:
set /a 30 ^<^< 1 ::左移1位,同set /a 30*2 set /a 30 ^>^> 1 ::右移1位,同set /a 30/2
其实还有:
set /a 30 ^<^< 2 ::左移2位,同set /a 30*4 set /a 30 ^>^> 2 ::右移2位,同set /a 30/4 . .. ...
>>写成^>^>,是因为在批处理中>或<是特殊符号需通过^转义.
而对于逻辑运算符:异^(相同则0) 或|(有 1则1) 非!(0取1,1取0) 与&(有0则0) 符号都必须用\引号)括起来才行
例子:set /a num=15“^\结果为10 set /a num=15\结果为5 计算过程:15:01111 15:01111 5:00101 5:00101 结果: 01010 00101
二进制的01010化为十进制为10 二进制的00101化为十进制为5 再看*= /= %= += -= &= ^= |= <<= >>= 这些都一样,都是简写。比如:set /a num+=2 就等价于 set /a num=%num%+2。.
表达式分隔符“,”这个运算符可以用来简化代码:如: set /a a=1
set /a b=2 就可以化简为 set /a a=1,b=2,c=3 set /a c=3
注意:1.DOS计算只能精确到整数
2.DOS计算只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。
3.set /a 支持多条算式,所以自带解释变量的功能,引用变量时可以直接使用变量名无需经过 cmd 预处理,但是当引 用的变量名以数字开头时会出错。例如:已经定义好的变量a=1 b=2 c=21 那么要计算1+2+21我们不用:
set /a s=%a%+%b%+%c%只要set /a s=a+b+c就行了。这是后面遇到的,回过来补充一下。
今天偶然看到了set /a 的一个特殊的用法:set /a a=!b它所起的作用就是将任意结果值变为0和1,当其运算的对象值不为0时,其运算结果为0,只有当其运算的对象值为0时,其运算结果才为1。如果你不是很明白就请在cmd中set /a \,然后任意更换b的值看a值的变化吧。
(二) set /p 变量名=提示 作用:变量的内容可由使用者自己来定义 做个批处理文件:@echo off
set /p a=请输入您的姓名 echo 您的姓名是:%a% pause 试试你就知道是干什么的了
还有就是 set /p a=<2.txt 那么他就会输出2.txt里德第一行的内容(后面遇到的 回来补充下)
看不懂的给个另外教程链接:http://www.bathome.net/thread-9721-1-8.html
来看一个题目:求一个变量的长度(不多于9个,多余9个的以后再说) 看一个答案: @echo off set str=exist
set n=%str?76543210
echo,%str% 字符个数为 %n:~9,1% 个 pause 不知道看的懂不。
解释一下,字符+9876543210是用来与变量str进行互补的。再想想看..... 在扩张一下: @echo off set str=abcde set
st2=%str%%str@39383736353433323130292827262524232221201918171615141312111009080706050403020100
echo,%str% 共有 %st2:~80,2% 个字符 pause 相同的道理
这里不能用 set /p “a=<2.txt” 因为双引号会吧命令当作字符