DOS命令与批处理学习历程

来源:互联网 发布:网络歌曲女生唱的 编辑:程序博客网 时间:2024/05/01 11:04

DOS窗口基本操作

  1. “↑”和”↓”键——————————回看上一次执行的命令
  2. “ESC”键————————————清除命令行
  3. “F7”键 ————————————-查看命令历史纪录
  4. “ALT+F7”键 ——————————清除命令历史纪录
  5. “ALT+F10”键 —————————–清除宏定义
  6. “Tab”键————————————输入文件名前几个字符按“Tab”键补齐文件名
  7. “Ctrl+C” 组合键或”Break”键 ——中断操作
  8. “命令+/?” 或”help+命令”———–查看帮助文档

DOS基本命令

DOS命令通常分为内部命令和外部命令。内部命令常驻内存,在任何时候都可以使用;外部命令是一个个单独的可执行文件,存放于磁盘,它们并不常驻内存,只有在电脑需要时,才会被调入内存,使用外部命令需要保证命令文件在当前的目录中,或已经被加载了路径。
内部命令都存放于command.com中,计算机启动时,随该文件加载并常驻于内存;我的电脑是64位Win10系统,外部命令存放于”C:\Windows\SysWOW64”文件夹下。标准Windows提示命令文件在哪里?

类型 内部命令 外部命令 目录命令 md(创建子目录) tree(显示目录结构) cd(改变当前目录) deltree(删除整个目录) rd(删除目录) tasklist(显示进程) dir(显示目录) taskkill(关闭进程) path(设置可执行文件的搜索路径) pushd(保存当前目录以供POPD命令使用,然后改到指定的目录) popd(更改到PUSHD命令存储的目录) 磁盘命令 vol(显示卷标) lable(建立卷标) format(磁盘格式化) unformat(恢复格式化) chkdsk(检查磁盘状态) diskcopy(整盘复制) scandisk(检测磁盘) defrag(碎片整理) sys(系统复制) fdisk(硬盘分区) 文件命令 copy(文件复制) xcopy(目录复制) type(查看文件内容) edit(编辑文本文件) ren(更改文件名) fc(文件比较) del(删除文件) undelete(恢复删除) move(移动文件) attrib(修改文件属性) more(逐屏显示输出) find/findstr(在文件里查找指定字符串) assoc和ftype(显示修改文件扩展名关联) 其他命令 cls(清除屏幕命令) mem(当前内存状况) ver(系统版本号) msg(显示系统信息) date(日期设置) doskey(调用和建立DOS宏命令) time(时间设置) help(查看DOS所有命令) set(设置变量) shutdown(关机) prompt(设置提示符) sc(与服务控制管理器和服务进行通信) title(设置cmd窗口的标题) reg(设置注册表) regsvr32(注册dll文件) shift(更改参数位置) 网络相关 telnet ping nbtstat(显示协议统计信息和当前使用NBI的TCP/IP连接) netstat(显示协议统计信息和当前的TCP/IP连接) ipconfig tracert net schtasks(替代at命令。允许管理员修改本地或远程上的计划任务) ftp(ftp文件传输) arp(显示修改地址解析协议(ARP)使用的IP到物理地址转换表) finger(显示与运行手指服务的指定系统上某个用户有关的信息)

想要详细学习每个命令可以在DOS窗口下输入”命令+/?” 或”help+命令”查看帮助文档,比如”dir+/?” 或”help+dir”,里面有介绍每个命令的功能及格式。觉得每次都要打开DOS输入命令查看太麻烦的话,这里有一个DOS函数参考手册。初学者也可以下载洪恩在线DOS教程进行学习,里面讲解的非常详细。


DOS知识杂集

dir

  1. dir+子目录名:查看所在目录下指定子目录的文件。
  2. dir/x:显示8.3格式的短文件名(确保该磁盘开启了8.3兼容特性 如何开启?)。
  3. 输入”dir”命令,倒数第二行显示的文件信息:”.”、”..”和每个子目录都算是一个文件,但大小算零。
  4. dir *.exe:显示当前目录中所有扩展名是exe的文件。
  5. “dir d: “:查看d盘下文件。若当前目录为C:>,不必输入两条指令d: +dir。

cd

  1. cd+路径:进入指定子目录。
  2. cd.:当前目录。
  3. cd..:返回上级目录。
  4. cd\:返回所在盘根目录。
  5. cd /d d:或”d:”:直接进入某盘符。
  6. cd.>test.txt:创建一个零字节的空白文件test.txt(cd.是进入本身目录;>test.txt是输出结果写入txt)

copy和xcopy

copy
功能:复制一份或多份文件到另一个位置。
格式:copy 源文件名 目的文件名(驱动器、目录缺省则为当前驱动器、目录,目的文件名缺省则为相同文件名)

  1. C:\>copy c:\dos\edit.com:把dos目录下的edit.com复制到当前C:目录,名字也是edit.com。
  2. 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:显示、设置、删除变量。

  1. 显示变量setset s 前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。
  2. 设置和调用变量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”。
  3. 删除变量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命令也可以比较,可以只列出文件不同的地方,但是只能比较两个大小相同的文件。

删除文件

  1. rd:删除目录。
  2. del:删除文件。
  3. 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位上该文件已经被淘汰)。

通配符

  1. *:代替文件名中的多个字符。”a星.星”是代表文件基本名以a开头的所有文件。在文件名中出现星后,其后的所有字符都不起作用,比如”a星.星”和”a星b.星”是没有任何区别的。文件基本名和扩展名中最多只能各出现一个星。
  2. ?:代替文件名中的单个字符。”a??b.*”是代表文件基本名只有四个字符,并且第一个字符是a,最后一个字符是b的所有文件。



批处理文件

批处理文件起源于DOS时代,在DOS时代的扩展名为.bat(即是batch的缩写)。在Windows NT以后的平台中,还加入了以.cmd为扩展名的批处理文件,其性能比.bat文件更加优越,执行也与.bat文件一样方便快捷。
注:由于.bat文件是基于16平台下的程序,在Windows NT及以后的32位中运行时偶尔会出现堆栈溢出之类的错误,所以建议在新的系统中尽可能的采用.cmd扩展的批处理文件代替.bat的文件。

我学习批处理,大部分都是跟着批处理之家这个网站内容学习的:批处理新手入门导读。

常用符号

@ % : ~ > | ^ & ()等批处理常用符号详解

基本命令

命令 功能 echo 显示此命令后的字符。echo 你好:显示”你好”。echo.:输出一个”回车换行”。echo:显示当前是 echo off 状态还是 echo on 状态。echo,%a%echo与变量中间使用逗号,.+/:;[]等特殊字符,防止变量是空以及变量名是onoff的时候发生异常。 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

表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:

  1. if “参数”==”字符串” 待执行的命令
    参数如果等于指定的字符串,则运行命令,否则运行下一句。(注意是两个等号)
    if "%1"=="a" format a:
    否定形式if not "%1"=="a" format a:
  2. if exist 文件名 待执行的命令
    如果有指定的文件,则运行命令,否则运行下一句。
    if exist config.sys edit config.sys
    否定形式if not exist config.sys edit config.sys
  3. 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或更高的值。当然,有些命令是没有返回值的,这点需要注意。
  4. if defined 变量 待执行的命令
    检测某个变量是否已经被定义。
    set “str1=ok”
    if defined str1 echo str1已经被定义
  5. 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命令比较两个文件的不同
百度百科:批处理

原创粉丝点击