查看本目录
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.youkuaiyun.com/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检测到发生错误