【原创】【学习笔记8】BAT特点,默认可使用的常量,关键字,保留符号,命令返回值errorlevel 等

 

查看本目录
chdir或pwd
echo %cd%


实现创建文件
md 创建文件夹
copy nul c
Type nul>c



实现copy
copy a b
Xcopy a b
type a >b
type a|>b
 

 

BAT特点

  • DOS和BAT的特殊之处
  • DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。--或名称
  • 一般写法,inform~n
  • 面向过程语言,
  • 逐行执行按line先替换变量,然后执行这一行的命令
  • 批处理文件是无格式的文本文件,它包含一条或多条命令

一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH)

首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

 

 

  • 批处理是一堆DOS命令的集合
  • dos 不是 Document Operating System 而是Disk Operating System,我经历过软盘时代,理解这段历史
  • cmd是 window nt  命令脚本 
  • bat 是 ms dos        批处理脚本
  • cmd是 command 的缩写,命令提示符。一般说的命令行是 command line
  • 批处理的文件扩展名: .bat .cmd  可以试下,二者我试了再win里使用时是等价的
  • 批处理我现在觉得语言特点就是很简短,但是不太好理解
  • 不太好理解,可能是因为bat里语句是以空格 分隔的,不像python的:和缩进,或c类的{}和;容易晕,其实本质是一样的,可能早期的语言亲和力没那么强而已
  • 强大的地方在于,多数人天天接触windows,用bat处理windows文件系统真的很方便
  • 就像天天用excel的人不会vba始终都是一个很大的缺憾!
  • 另外还有很大的一个时代特征,好多用dos bat做木马,病毒,黑客的,真的很符合记忆里当时的那个时代特征
  • 最近学这个的心得,果然就是,编程这东西,靠练习二不靠学习的

 

cmd和bat区别(dos和bat是纯的,正统!!

  • 所谓“Windows NT脚本”(.cmd),只不过因为扩展名不被DOS识别而能被Windows NT、Windows XP等识别罢了。(在Windows 9x 后,很多命令增加了新语法,但不分.bat或.cmd)
  • cmd是Win32命令,只能在32位系统中的命令行窗口中使用,仅仅是基于windows环境下的假DOS,不是纯DOS
  • windows操作系统里,需要输入CMD 进命令提示符进入伪dos
  • bat是DOS命令,而纯DOS本身就是一种操作系统,在任何环境下都可以使用。纯DOS下甚至可以删除windows系统.

 

bat文件里中文乱码问题

  • 解决方法1:bat文件,右键/编辑/文件-另存为/编码格式 utf-8修改为ansi
  • 解决方法2: 直接在bat里改变编码格式
  • 下面是查的经验介绍,一般说是 chcp 50001可解决中文乱码问题,我实测时chcp 936才可以
  • chcp 50001   换成utf-8
  • chcp 936      换成默认的GBK--应该是换成了ansi-asc了吧
  • chcp 437      换成美国英语?

 

@echo off
REM 声明采用UTF-8编码
chcp 936
echo test
echo 中文测试
pause

 

解决中文乱码的参考文档

https://blog.csdn.net/u013948858/article/details/81036079

 

 

 

 

等于符号

EQU - 等于                          ==
NEQ - 不等于                     !=
LSS - 小于                           <
LEQ - 小于或等于                <=
GTR - 大于                          >
GEQ - 大于或等于              >=

 

 

 

BAT 可用的设备名

con   控制器,窗口,显示器,键盘?

prn  打印机 同lpt1

nul  空设备

lpt1~lpt3 并行通信口

aux 第一串行通信口,同com1

com1~com4 第1~第3串行通信口

 

 

 

一些命令显示的默认情况

echo                   //显示当前的echo状态

set                       //显示当前的系统环境变量

date

time /t

label

vol

ver

 

 

 

有各种默认的系统变量,可以用echo显示出来

 

 

echo %cd%                            //显示当前目前路径

echo  %errorlevel%                //显示上一条语句的返回值,0是正常,1是有错误

echo %computername%

echo %username%

echo %userdomain%

 

 

 

一些技巧

echo 新的等待语 pause>nul

 


特殊符号?

首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:

    CR(0D) 命令行结束符

    Escape(1B) ANSI转义字符引导符

    Space(20)  常用的参数界定符

    Tab(09) ; = 不常用的参数界定符

    +           COPY命令文件连接符

    * ? 文件通配符

    "" 字符串界定符

    | 命令管道符

    < > >> 文件重定向符

    @ 命令行回显屏蔽符

    / 参数开关引导符

    : 批处理标签引导符

    % 批处理变量引导符

 

 

 

关于句柄

句柄句柄的数字代号描述

STDIN

0

键盘输入

STDOUT

1

输出到命令提示符窗口

STDERR

2

错误输出到命令提示符窗口

UNDEFINED

3-9

句柄由应用程序单独定义,它们是各个工具特有的

 

 

 

几个常用命令的返回值及其代表的意义:


backup
0 备份成功
1 未找到备份文件
2 文件共享冲突阻止备份完成
3 用户用ctrl-c中止备份
4 由于致命的错误使备份操作中止

diskcomp
0 盘比较相同
1 盘比较不同
2 用户通过ctrl-c中止比较操作
3 由于致命的错误使比较操作中止
4 预置错误中止比较

diskcopy
0 盘拷贝操作成功
1 非致命盘读/写错
2 用户通过ctrl-c结束拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作

format
0 格式化成功
3 用户通过ctrl-c中止格式化处理
4 因致命的处理错误使格式化中止
5 在提示“proceed with format(y/n)?”下用户键入n结束

xcopy
0 成功拷贝文件
1 未找到拷贝文件
2 用户通过ctrl-c中止拷贝操作
4 预置错误阻止文件拷贝操作
5 拷贝过程中写盘错误

 

以下就是几个常用命令的返回值及其代表的意义: 

 

backup 

0 备份成功 

1 未找到备份文件 

2 文件共享冲突阻止备份完成 

3 用户用ctrl-c中止备份 

4 由于致命的错误使备份操作中止 

 

diskcomp 

0 盘比较相同 

1 盘比较不同 

2 用户通过ctrl-c中止比较操作 

3 由于致命的错误使比较操作中止 

4 预置错误中止比较 

 

diskcopy 

0 盘拷贝操作成功 

1 非致命盘读/写错 

2 用户通过ctrl-c结束拷贝操作 

3 因致命的处理错误使盘拷贝中止 

4 预置错误阻止拷贝操作 

 

format 

0 格式化成功 

3 用户通过ctrl-c中止格式化处理 

4 因致命的处理错误使格式化中止 

5 在提示“proceed with format(y/n)?”下用户键入n结束 

 

xcopy 

0 成功拷贝文件 

1 未找到拷贝文件 

2 用户通过ctrl-c中止拷贝操作 

4 预置错误阻止文件拷贝操作 

5 拷贝过程中写盘错误 

 

==== willsort 编注 =====================================================

chkdsk

0    未找到错误

255  找到一个或多个错误

 

choice

0    用户按下ctrl+c/break

1    用户按下第一个键

255  检测到命令行中的错误条件

其它 用户按下的有效字符在列表中的位置

 

defrag

0    碎片压缩成功

1    出现内部错误

2    磁盘上没有空簇。要运行DEFRAG,至少要有一个空簇

3    用户用Ctrl+C退出了DEFRAG

4    出现一般性错误

5    DEFRAG在读簇时遇到错误

6    DEFRAG在写簇时遇到错误

7    分配空间有错

8    内存错

9    没有足够空间来压缩磁盘碎片

 

deltree

0    成功地删除一个目录

 

diskcomp

0    两盘相同

1    发现不同

2    按CTRL+C 终止了比较

3    出现严重错误

4    出现初始化错误

 

find

0    查找成功且至少找到了一个匹配的字符串

1    查找成功但没找到匹配的字符串

2    查找中出现了错误

 

keyb

0    键盘定义文件装入成功

1    使用了非法的键盘代码,字符集或语法

2    键盘定义文件坏或未找到

4    键盘、监视器通讯时出错

5    要求的字符集未准备好

 

move

0    成功地移动了指定的文件

1    发生了错误

 

msav /N

86   检查到了病毒

 

replace

0    REPLACE成功地替换或加入了文件

1    MS-DOS版本和REPLACE不兼容

2    REPLACE找不到源文件

3    REPLACE找不到源路径或目标路径

5    不能存取要替换的文件

8    内存不够无法执行REPLACE

11    命令行句法错误

 

restore

0    RESTORE成功地恢复了文件

1    RESTORE找不到要恢复的文件

3    用户按CTRL+C终止恢复过程

4    RESTORE因错误而终止

 

scandisk

0    ScanDisk在它检查的驱动器上未检测到任何错误

1    由于命令行的语法不对,不能运行ScanDisk

2    由于内存用尽或发生内部错误,ScanDisk意外终止

3    用户让ScanDisk中途退出

4    进行盘面扫描时,用户决定提前退出

254  ScanDisk找到磁盘故障并已全部校正

255  ScanDisk找到磁盘故障,但未能全部校正

 

setver

0    SETVER成功地完成了任务

1    用户指定了一个无效的命令开关

2    用户指定了一个非法的文件名

3    没有足够的系统内存来运行命令

4    用户指定了一个非法的版本号格式

5    SETVER在版本表中未找到指定的项

6    SETVER未找到SETVER.EXE文件

7    用户指定了一个非法的驱动器

8    用户指定了太多的命令行参数

9    SETVER检测到丢失了命令行参数

10   在读SETVER.EXE文件时,SETVER检测到发生错误

11   SETVER.EXE文件损坏

12   指定的SETVER.EXE文件不支持版本表

13   版本表中没有足够的空间存放新的项

14   在写SETVER.EXE文件时SETVER检测到发生错误

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值