DOS命令与批处理学习历程
来源:互联网 发布:网络歌曲女生唱的 编辑:程序博客网 时间:2024/05/01 11:04
DOS窗口基本操作
- “↑”和”↓”键——————————回看上一次执行的命令
- “ESC”键————————————清除命令行
- “F7”键 ————————————-查看命令历史纪录
- “ALT+F7”键 ——————————清除命令历史纪录
- “ALT+F10”键 —————————–清除宏定义
- “Tab”键————————————输入文件名前几个字符按“Tab”键补齐文件名
- “Ctrl+C” 组合键或”Break”键 ——中断操作
- “命令+/?” 或”help+命令”———–查看帮助文档
DOS基本命令
DOS命令通常分为内部命令和外部命令。内部命令常驻内存,在任何时候都可以使用;外部命令是一个个单独的可执行文件,存放于磁盘,它们并不常驻内存,只有在电脑需要时,才会被调入内存,使用外部命令需要保证命令文件在当前的目录中,或已经被加载了路径。
内部命令都存放于command.com中,计算机启动时,随该文件加载并常驻于内存;我的电脑是64位Win10系统,外部命令存放于”C:\Windows\SysWOW64”文件夹下。标准Windows提示命令文件在哪里?
想要详细学习每个命令可以在DOS窗口下输入”命令+/?” 或”help+命令”查看帮助文档,比如”dir+/?” 或”help+dir”,里面有介绍每个命令的功能及格式。觉得每次都要打开DOS输入命令查看太麻烦的话,这里有一个DOS函数参考手册。初学者也可以下载洪恩在线DOS教程进行学习,里面讲解的非常详细。
DOS知识杂集
dir
- dir+子目录名:查看所在目录下指定子目录的文件。
- dir/x:显示8.3格式的短文件名(确保该磁盘开启了8.3兼容特性 如何开启?)。
- 输入”dir”命令,倒数第二行显示的文件信息:”.”、”..”和每个子目录都算是一个文件,但大小算零。
- dir *.exe:显示当前目录中所有扩展名是exe的文件。
- “dir d: “:查看d盘下文件。若当前目录为C:>,不必输入两条指令d: +dir。
cd
- cd+路径:进入指定子目录。
- cd.:当前目录。
- cd..:返回上级目录。
- cd\:返回所在盘根目录。
- cd /d d:或”d:”:直接进入某盘符。
- cd.>test.txt:创建一个零字节的空白文件test.txt(cd.是进入本身目录;>test.txt是输出结果写入txt)
copy和xcopy
copy
功能:复制一份或多份文件到另一个位置。
格式:copy 源文件名 目的文件名
(驱动器、目录缺省则为当前驱动器、目录,目的文件名缺省则为相同文件名)
C:\>copy c:\dos\edit.com
:把dos目录下的edit.com复制到当前C:目录,名字也是edit.com。copy c:\*.bat c:\zht
:复制C盘根目录下所有扩展名是bat的文件到zht目录里。
xcopy
功能:复制一份或多份文件或目录。在连同子目录一起拷贝时很有用,拷贝大量文件时比copy命令要快得多。
格式:xcopy 文件名/目录名 目的目录
将指定文件或目录拷贝到目的目录。
ren和move
格式:ren 源文件名 目的文件名
ren abc.txt bne.bat
把当前目录下abc.txt文件改名为bne.bat。
注意:如果用ren命令更改非当前目录中的文件名,那么源文件路径和目的文件路径要在同一个目录内。
格式: move 文件名 目录
(移动文件至新目录下) move 目录名 目录名
(修改目录名)
实例: move 1.txt Mine\
:当前目录下1.txt移动到Mine目录下。 move 手机 电脑
:当前目录下“手机”目录修改为“电脑”目录。
type和more
type D:\UltraEdit\changes.txt
查看changes.txt文件的内容。
注意:除了扩展名是txt的文件,对其它文件最好不要使用type命令,否则屏幕上很可能会出现乱码。
more D:\UltraEdit\changes.txt
分屏查看changes.txt文件的内容。
path和set
path:为可执行文件设置一个搜索路径。
可执行文件包括.com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh;.msc。
在DOS下,如果我们要执行某个可执行文件,电脑会在磁盘上寻找这个文件,如果不经过特殊处理,它只在当前目录下寻找,如果没有找到则提示出错。
但是每次要执行某个文件前,都要将当前目录转换到它所在的目录很麻烦。所以我们使用Path命令定义某个目录。比如path c:\dos;c:\windows;c:\
这条命令是说,当我们执行一个文件时,电脑先在当前目录下查找这个文件,找到则执行,如果没有找到,则按照path命令所指定的目录顺序去查找,先在C盘dos目录下,然后在windows目录下,最后在C盘根目录下寻找这个文件。
但是即使是这样,每次启动都需要输入path路径依然很麻烦。因此我们把path命令写入DOS启动顺序中要自动执行的一个命令文件autoexec.bat中,这样启动计算机后,就可以执行Path命令指定目录中的任何可执行文件了。
set:显示、设置、删除变量。
- 显示变量:
set
或set s
前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。 - 设置和调用变量:
set [变量]=[字符串]
例如:set path=c:\dos;c:\windows;c:\
与path c:\dos;c:\windows;c:\
含义一致。
例如:set aa=abcd
,就是把aa定义为abcd。如果要调用这个变量,就把aa两边加上个百分号。set aa=abcd
-echo %aa%
-pause
-
运行这段命令就会显示“abcd”。 - 删除变量:
set aa=
此句命令即可删除变量aa。若变量aa已被定义,则删除变量aa;若aa尚未定义,则此句命令无实质意义。
Tips:批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等。比如执行set aa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
fc
格式:fc [文件1路径] [文件2路径]
FC默认逐行比较两个文件。文件中每一行的长度应小于256个字符,如果行长超过256个字符或者比较对象是二进制文件或程序文件,应加上/b参数,fc将对它们逐字节比较。
使用定向输出“>”: fc a.txt b.txt >c.txt
意思是把比较的结果写入c.txt,如果c.txt不存在先创建,存在的话覆盖原文件。如果不想覆盖原文件而是想追加到c.txt的话可以用“>>”,例:fc a.txt b.txt>>c.txt
。
补充:如果需要详细和可视化的比较结果可以百度一些文件比较的软件。
comp命令也可以比较,可以只列出文件不同的地方,但是只能比较两个大小相同的文件。
删除文件
- rd:删除目录。
- del:删除文件。
- deltree:删除目录树。
解压文件
dos本身不具备压缩解压功能,但可以借用WinRAR软件来实现这一功能,在某些脚本中该命令的助力还是不错的。
参数:
- a 压缩文件。
- e 不带压缩路径解压文件。
- x 带绝对路径解压文件。
命令:
- 压缩命令:start winrar a [压缩结果文件路径] [要压缩的文件路径]。
start winrar a d:\1.rar(或1.zip等) d:\Learning\ASCII.jpg
:将d:\Learning\目录下的ASCII.jpg压缩为1.rar(或1.zip等。默认格式为rar) - 解压命令(不带解压路径):start winrar e [要解压的文件路径]。
d:\Mine>start winrar e d:\1.zip
:将d:\目录下的1.zip文件解压到当前目录d:\Mine\下。 - 解压命令(带解压路径):start winrar x [要解压的文件路径] [解压结果文件路径] 。
start winrar x d:\Learning\1.rar d:\
:把d:\Learning\目录下的1.rar解压到d:\目录下。
外部文件
文件名=基本名+扩展名。
DOS的外部命令都是可以直接执行的文件,包括.exe和.com文件。
- exe:可执行文件(Executable File)。程序允许建立若干不同名的代码段、数据段、堆栈段或附加段。程序的长度仅受当前内存可用空间的限制。
- com:DOS命令文件(Command File)。程序只能设置一个段,且不建立堆栈段。程序的长度必须少于64K字节。com与exe文件的区别
如果我们要执行这些文件,只需在DOS窗口里敲入文件基本名然后回车即可,不需输入文件后缀。如:tree.com文件,功能显示目录结构,如果要执行它,输入tree即可;又如mem.exe文件,功能查看电脑目前内存占用情况,如果要执行它,输入mem即可(win64位上该文件已经被淘汰)。
通配符
- *:代替文件名中的多个字符。”a星.星”是代表文件基本名以a开头的所有文件。在文件名中出现星后,其后的所有字符都不起作用,比如”a星.星”和”a星b.星”是没有任何区别的。文件基本名和扩展名中最多只能各出现一个星。
- ?:代替文件名中的单个字符。”a??b.*”是代表文件基本名只有四个字符,并且第一个字符是a,最后一个字符是b的所有文件。
批处理文件
批处理文件起源于DOS时代,在DOS时代的扩展名为.bat(即是batch的缩写)。在Windows NT以后的平台中,还加入了以.cmd为扩展名的批处理文件,其性能比.bat文件更加优越,执行也与.bat文件一样方便快捷。
注:由于.bat文件是基于16平台下的程序,在Windows NT及以后的32位中运行时偶尔会出现堆栈溢出之类的错误,所以建议在新的系统中尽可能的采用.cmd扩展的批处理文件代替.bat的文件。
我学习批处理,大部分都是跟着批处理之家这个网站内容学习的:批处理新手入门导读。
常用符号
@ % : ~ > | ^ & ()等批处理常用符号详解
基本命令
echo 你好
:显示”你好”。echo.
:输出一个”回车换行”。echo
:显示当前是 echo off
状态还是 echo on
状态。echo,%a%
:echo
与变量中间使用逗号,
或.+/:;[]
等特殊字符,防止变量是空以及变量名是on
或off
的时候发生异常。 echo off 从下一行开始关闭回显。 echo on 从下一行开始打开回显。 @ 关闭单行回显,不显示此命令行本身,加在命令行的最前面。 % 参数表示符/变量引用符。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。根目录下一个批处理文件的名为t.bat,内容为 type %1 type %2
。那么运行C:\>t a.txt b.txt
将顺序地显示a.txt和b.txt文件的内容。%a%代表引用变量a。 call 调用另一个批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)。call c:\ucdos\ucdos.bat
:调用ucdos.bat pause 运行此句会暂停,显示Press any key to continue...
start 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。start calc.exe
即可打开Windows的计算器。 rem和:: 注释符。相当于c的//。与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on
打开命令行回显状态。另外, rem 可以用于 config.sys 文件中。 : 标号。”:字符串”表示,标号所在行不被执行。:start ;goto start
“>”和”>>” 命令重定向符,将输出信息重定向到指定的设备或文件,系统默认输出到显示器。nul指空设备,>nul 是屏蔽命令的输出内容。比如 pause >nul,屏蔽”请按任意键继续…”相当于回车换行;del wind 2>nul,屏蔽错误的内容,就算没有wind文件,也不会有提示。”命令+>+写入路径”。作用是把原本输出到cmd窗口中的信息重定向到文本文件中去。例:echo 123>d:\1.txt
写123到1.txt。>:1.txt不存在先创建,存在的话覆盖原文件。>>:追加到1.txt。 exit 退出DOS窗口。特殊命令
if
表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:
- if “参数”==”字符串” 待执行的命令
参数如果等于指定的字符串,则运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
否定形式if not "%1"=="a" format a:
- if exist 文件名 待执行的命令
如果有指定的文件,则运行命令,否则运行下一句。
如if exist config.sys edit config.sys
否定形式if not exist config.sys edit config.sys
- if errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则运行命令,否则运行下一句。
如if errorlevel 2 goto start
。
否定形式if not errorlevel 2 goto start
DOS命令运行后都会返回一个数字给DOS,称为返回码或错误码errorlevel。输入echo %errorlevel%
就可以获取到前一个命令的返回值。
if errorlevel leq 1 goto start 这里的leq表示小于等于。全部的比较参数及常用命令的返回值及其代表的意义
一般情况下,程序或命令成功执行时,返回的errorlevel是0,错误时返回1或更高的值。当然,有些命令是没有返回值的,这点需要注意。 - if defined 变量 待执行的命令
检测某个变量是否已经被定义。
set “str1=ok”
if defined str1 echo str1已经被定义 - if 条件 (命令1) else 命令2
else的用法,记得命令1加括号。
for
对一组文件中的每个文件运行指定的命令。
格式
FOR [%%i] IN (set) DO [command]
执行过程:for
语句依次提取集合set
中的每一个元素,把它的值赋予形式变量i
,带到do
后的命令command
中参与命令的执行;并且每次只提取一个元素,然后执行一次do
后的命令语句,而无论这个元素是否被带到command
中参与了command
的运行;当执行完一次do
后的语句之后,再提取set
中的下一个元素,再执行一次command
,如此循环,直到set
中的所有元素都已经被提取完毕,该for
语句才宣告执行结束;
参数i在DOS窗口中格式为[%i]
,在批处理文件中格式为[%%i]
。
例:for %%i in (*.bat *.txt) do type %%i
:含义是如果是以bat或txt结尾的文件,则显示文件的内容。
- for 处理文件
-------------FOR %%variable IN (set) DO command
- for /d 处理文件夹
--------FOR /D %%variable IN (set) DO command
- for /r 枚举目录树处理文件
--FOR /R [[drive:]path] %%variable IN (set) DO command
- for /l 处理数字序列
--------FOR /L %%variable IN (start,step,end) DO command
- for /f 处理字符串、命令输出和文本内容
--FOR /F ["options"] %%variable IN (file-set/"string"/'command') DO command
goto
批处理文件运行到这里将跳到goto所指定的标号处, 一般与if配合使用。
goto end :end echo this is the end
choice
让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
如: choice /c ync /m 确认请按y,否请按n,取消请按c
将显示
确认请按y,否请按n,取消请按c [Y,N,C]?
例如,test.bat的内容如下:
@echo off choice /c:dme defrag,mem,end if errorlevel 3 goto defrag 应先判断数值最高的错误码if errorlevel 2 goto mem if errotlevel 1 goto end :defrag c:\dos\defrag goto end :mem mem goto end :end echo good bye
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
set /p p=请输入
:屏幕上显示”请输入”,并会将输入的字符串赋值给变量p。这条可以用来取代 choice 命令。
参考资料
百度百科:DOS命令
Wikipedia:MS-DOS命令列表
dos下怎么压缩/解压文件
Dos命令比较两个文件的不同
百度百科:批处理
- DOS命令与批处理学习历程
- DOS命令与批处理
- dos命令批处理学习之符号
- 批处理与DOS命令的区别
- dos批处理命令详解
- DOS批处理命令详解
- dos批处理命令详解
- 常用DOS批处理命令
- dos批处理命令详解
- dos批处理命令详解
- dos批处理命令详解
- dos批处理命令详解
- dos批处理命令详解
- dos和批处理命令
- dos批处理命令详解
- dos批处理命令详解
- dos bat 批处理 命令
- Dos 批处理命令
- Django启动服务器报错:maximum recursion depth exceeded in cmp
- CentOS7 minimal*xfce+Win10 双系统配置过程记录
- MOOC清华《面向对象程序设计》第3章:移动构造函数实验
- 【NOIP模拟考三】线段树/ST表 day2 second 二叉树
- springmvc之上传图片
- DOS命令与批处理学习历程
- spring中关于对jdbc.properties使用的两种配置方式
- 剑指offer 3---二维数组的查找
- [编程题] 洗牌
- Symfony Twig模板引擎——基础知识总结
- [POJ 3259] Wormholes [SPFA]
- Java出现null指针的九种情况
- C# 学习1: 网上摘录以备学习-------MVC
- 利于二维数组写一个五子棋,棋盘14x14