DOS内部命令和批处理命令列表剖析.docx
《DOS内部命令和批处理命令列表剖析.docx》由会员分享,可在线阅读,更多相关《DOS内部命令和批处理命令列表剖析.docx(19页珍藏版)》请在冰点文库上搜索。
![DOS内部命令和批处理命令列表剖析.docx](https://file1.bingdoc.com/fileroot1/2023-6/23/4adea720-2994-4f65-be91-8ce4dce0f986/4adea720-2994-4f65-be91-8ce4dce0f9861.gif)
DOS内部命令和批处理命令列表剖析
DOS内部命令和批处理命令列表
Wikipedia,自由的百科全书
MS-DOS7.1所有内部命令与批处理命令中文帮助集合
——本页所有内容均由熊朝伟独自汉化。
命令:
CALL
功能:
在批处理文件中调用批处理文件.
CALL[驱动器:
][路径]文件名[批命令参数]
批命令参数 指定批处理文件所需的命令行参数.
命令:
CD/CHDIR
功能:
显示或改变当前目录.
CHDIR[驱动器:
][路径]
CHDIR[..]
CD[驱动器:
][路径]
CD[..]
.. 表示当前目录改变成父目录.
键入CD[驱动器:
],可显示指定驱动器的当前目录.
键入不带参数的CD可显示当前驱动器和当前目录.
命令:
CLS
功能:
清除屏幕。
CLS
命令:
COPY
功能:
文件拷贝.
COPY[/A|/B]source[/A|/B][+source[/A|/B][+...]][destination
[/A|/B]][/V][/Y|/-Y]
source 指定被拷贝的文件.
/A 表示ASCII正文文件.
/B 表示二进制文件.
destination 指定新文件的目录和文件名.
/V 校验新文件是否正确.
/Y 在重写原有的目标文件之前,不让你确认.
/-Y 在重写原有的目标文件之前,让你确认.
开关项/Y可由环境变量COPYCMD预设.
-Y可以更改预设值.要合并多个文件时,可指定单个目标文件,但指定多个
源文件(使用通配符或文件1+文件2+文件3格式).
命令:
DATE
功能:
显示或设置日期。
DATE [日期]
显示当前日期设置和输入新日期的提示,请键入
不带参数的DATE。
要保留现有日期,请按ENTER。
命令:
DEL/ERASE
功能:
删除文件.
DEL[驱动器:
][路径]文件名[/P]
ERASE[驱动器:
][路径]文件名[/P]
[驱动器:
][路径]文件名 指定被删除的文件,用通配符指定多个文件.
/P 删除每个文件之前显示确认信息.
命令:
DIR
功能:
显示目录中的文件和子目录列表。
DIR[驱动器:
][路径][文件名][/P][/W][/A[[:
]属性]]
[/O[[:
]排序方式]][/S][/B][/L][/V][/4]
[驱动器:
][路径][文件名]
指定列出的驱动器,目录或文件。
(可支持带通配符的长文件名)
/P 显示一屏信息后暂停。
/W 使用宽幅列表格式。
/A 显示指定属性的文件。
属性 D 目录 R 只读文件
H 隐含文件 A 准备存档的文件
S 系统文件 - 前缀,表示"非"
/O 排序后列出文件。
排序方式 N 按文件名(字母顺序) S 按大小(小文件在前)
E 按扩展名(字母顺序) D 按日期和时间(先建立的在前)
G 先列出子目录 - 前缀,表示反序
A 按最后访问日期排序(先访问的在前)
/S 列出指定目录及其所有子目录的文件。
/B 使用空格式(没有标题信息或摘要)。
/L 用小写。
/V Verbosemode.
/4 用四位数字显示年
开关可能已用DIRCMD环境变量预置.
用连字符(-)可更换预置的开关,例如/-W.
命令:
ECHO
功能:
显示信息,打开或关闭命令的回显.
ECHO[ON|OFF]
ECHO[信息]
键入不带参数的ECHO可显示ECHO的当前设置.
命令:
EXIT
功能:
退出COMMAND.COM命令解释程序.
EXIT
命令:
FOR
功能:
对一系列文件中的每个文件执行指定的命令.
FOR%变量名IN(文件集)DO命令名[命令行参数]
%变量名 指定可替换型参数.
(文件集) 指定包含一个或多个文件的文件集,可使用通配符.
命令名 指定为每个文件执行的命令.
命令行参数
指定命令的参数或开关.
在批处理文件中使用FOR命令时,用%%变量名替换%变量名.
命令:
GOTO
功能:
在批处理程序中将Windows转向到指定的行号.
GOTO标号
标号 指定在批处理文件中用作标号的正文字符串.
标号独占一行,以冒号打头.
命令:
IF
功能:
批文件的条件语句.
IF[NOT]ERRORLEVEL数值命令名
IF[NOT]字串1==字串2命令名
IF[NOT]EXIST文件名命令名
NOT 指示Windows在条件不成立时才执行命令.
ERRORLEVEL数值 如果上次程序返回的退出码大于或等于指定的数值,则条件成立.
命令名 指定条件满足时应执行的命令.
字串1==字串2 如果正文字符串匹配,则条件成立.
EXIST文件名 如果指定的文件存在,则条件成立.
命令:
LH/LOADHIGH
功能:
将程序装入上端内存区.
LOADHIGH[驱动器:
][路径]程序名[参数]
LOADHIGH[/L:
区域1[,最小值1][;区域2[,最小值2]...][/S]]
[驱动器:
][路径]程序名[参数]
/L:
区域1[,最小值1][;区域2[,最小值2]]...
指定装裁程序的内存区域,<区域1>指定第一个内存区号.
<最小值1>指定<区域1>的最小尺寸(若有).
<区域2>和<最小值2>指定第二个内存块号和最小尺寸(若有).
内存区域的个数不限.
/S 装入程序时,将UMB收缩到最小尺寸.
[驱动器:
][路径]文件名
指定程序的名称和位置.
命令:
MD/MKDIR
功能:
创建目录.
MKDIR[驱动器:
]目录
MD[驱动器:
]目录
命令:
PATH
功能:
显示或设置可执行文件的搜索路径.
PATH[[驱动器:
]路径[....]]
PATH ;
键入PATH ;可清除所有的搜索路径,使Windows只搜索当前目录
键入不带参数的PATH可显示当前路径.
命令:
PAUSE
功能:
暂停批处理程序,并显示以下消息:
请按任意键继续...
PAUSE
命令:
PROMPT
功能:
更改命令提示符。
PROMPT[text]
text 指定新的命令提示符。
提示符可以由普通字符及下列特定代码组成:
$Q =(等号)
$$ $(货币符号)
$T 当前时间
$D 当前日期
$P 当前驱动器及路径
$V Windows版本号
$N 当前驱动器
$G >(大于符号)
$L <(小于符号)
$B |(管道)
$H 退格(擦除前一个字符)
$E Escape码(ASCII码27)
$_ 回车换行
键入不带参数的PROMPT可以将提示符改回默认设置。
命令:
RD/RMDIR
功能:
删除目录.
RMDIR[驱动器:
]目录
RD[驱动器:
]目录
命令:
REM
功能:
在批处理文件或CONFIG.SYS里加上注解或说明。
REM[注解]
命令:
REN/RENAME
功能:
重命名文件或目录列表。
RENAME[驱动器:
][路径]文件名1文件名2.
REN[驱动器:
][路径]文件名1文件名2.
请注意,您不能为目标文件或目录列表指定新的驱动器或路径。
命令:
SET
功能:
显示,设置或删除Windows环境变量.
SET[变量=[字符串]]
变量 指定环境变量名.
字符串 指定赋给环境变量的字符串.
键入不带参数的SET可显示当前的环境变量.
命令:
TIME
功能:
显示或设置系统时间。
TIME[时间]
显示当前时间设置和输入新时间的提示,请键入
不带参数的TIME。
要保留现有时间,请按ENTER。
命令:
TYPE
功能:
显示文本文件的内容。
TYPE[驱动器:
][路径]文件名
命令:
VER
功能:
显示Windows版本.
VER
命令:
VOL
功能:
显示磁盘的标签号和存在的序列号.
VOL[驱动器:
]
取自"-
usebackq--使用反写的单引号键,(这个键在键盘上数字1的左面,波浪号的下档键)。
用它括起的内容为命令。
例如
`set'[对不起,我这里打不进来],表示执行set命令,即取环境变量。
delims=xxx定义字词分隔符,默认是空白键,表格键。
delims=就是不用默认分隔符,用自己在这里定义的东西,例如分号豆号。
eol=c定义注解开始点的符号(1个字符),该号起,直到行尾是注解
skip=3跳过文件开始的头3行。
墨认是跳过所有空白行,不跳有字行。
tokens=x,y,m-n,x,y是特殊字符,例如要查找的字符,m-n是范围,第几到第几个特殊字符,在此范围内的内容作语法分析。
"usebackqdelims=;"联在一起--仍应看成分别的两个定义,一个定义反引号,另一个定义分隔符是";"号。
批处理中的for详解
批处理中的for详解
简单说,FOR是个循环,可以用你指定的循环范围生成一系列命令。
最简单的例子,就是人工指定循环范围,然后对每个值执行指定的命令。
例如,想快速报告每个硬盘分区的剩余空间:
for%ain(c:
d:
e:
f:
)do@dir%a\ find"bytesfree"
将输出:
8Dir(s)1,361,334,272bytesfree
15Dir(s)8,505,581,568bytesfree
12Dir(s)12,975,149,056bytesfree
7Dir(s)11,658,854,400bytesfree
用它可以使一些不支持通配符的命令对一系列文件进行操作。
在WIN9X中,TYPE命令(显示文件内容)是不支持*.txt这种格式的(WIN2K开始TYPE已支持通配)。
遇到类似情况就可以用FOR:
for%ain(*.txt)dotype%a
这些还不是FOR最强大的功能。
我认为它最强大的功能,表现在以下这些高级应用:
1.可以用/r参数遍历整个目录树
2.可以用/f参数将文本文件内容作为循环范围
3.可以用/f参数将某一命令执行结果作为循环范围
4.可以用%~操作符将文件名分离成文件名、扩展名、盘符等独立部分
现分别举例说明如下:
1.用/r遍历目录树
当用*.*或*.txt等文件名通配符作为for/r的循环范围时,可以对当前目录下所有文件(包括子目录里面的文件)进行操作。
举个例子,你想在当前目录的所有txt文件(包括子目录)内容中查找"bluebear"字样,但由于find本身不能遍历子目录,所以我们用for:
for/r.%ain(*.txt)do@find"bluebear"%a
find前面的@只是让输出结果不包括find命令本身。
这是DOS很早就有的功能。
和FOR无关。
当用.作为循环范围时,for只将子目录的结构(目录名)作为循环范围,而不包括里面的文件。
有点象TREE命令,不过侧重点不同。
TREE的重点是用很漂亮易读的格式输出,而FOR的输出适合一些自动任务,例如,我们都知道用CVS管理的项目中,每个子目录下都会有一个CVS目录,有时在软件发行时我们想把这些CVS目录全部去掉:
for/r.%ain(.)do@ifexist%a\CVSrd/s/q%a\CVS
先用ifexist判断一下,是因为for只是机械的对每个目录进行列举,如果有些目录下面没有CVS也会被执行到。
用ifexist判断一下比较安全。
这种删除命令威力太大,请小心使用。
最好是在真正执行以上的删除命令前,将rd/s/q换成@echo先列出要删出的目录,确认无误后再换回rd/s/q:
for/r.%ain(.)do@ifexist%a\CVS@echo%a\CVS
可能目录中会多出一层".",比如c:
\proj\release\.\CVS,但不会影响命令的执行效果。
2.将某一文件内容或命令执行结果作为循环范围:
假如你有一个文件todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉。
假设这个文件是每个文件名占一行,象这样:
c:
\temp\a1.txt
c:
\temp\a2.txt
c:
\temp\subdir\b3.txt
c:
\temp\subdir\b4.txt
那么可以用FOR来完成:
for/f%ain(todel.txt)dodel%a
这个命令还可以更强大。
比如你的todel.txt并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样:
VolumeindriveDisDATA
VolumeSerialNumberisC47C-9908
DirectoryofD:
\tmp
09/26/200112:
50PM18,426alg0925.txt
12/02/200104:
29AM795bsample.txt
04/11/200204:
18AM2,043invitation.txt
4File(s)25,651bytes
0Dir(s)4,060,700,672bytesfree
for仍然可以解出其中的文件名并进行操作:
for/f"skip=5tokens=5"%ain(todel.txt)do@ifexist%aDEL%a
当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo:
for/f"skip=5tokens=5"%ain(todel.txt)do@ifexist%aecho%a
你将看到:
alg0925.txt
bsample.txt
invitation.txt
skip=5表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名。
在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失。
3.可以用/f参数将某一命令执行结果作为循环范围
非常有用的功能。
比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值)。
可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分:
FOR/F"delims=="%iIN('set')DO@echo%i
将看到:
ALLUSERSPROFILE
APPDATA
CLASSPATH
CommonProgramFiles
COMPUTERNAME
ComSpec
dircmd
HOMEDRIVE
......
这里是将set命令执行的结果拿来作为循环范围。
delims==表示用=作为分隔符,由于FOR/F默认是用每行第一个TOKEN,所以可以分离出变量名。
如果是想仅列出值:
FOR/F"delims==tokens=2"%iIN('set')DO@echo%i
tokens=2和前例相同,表示将第二列(由=作为分隔符)作为循环值。
再来个更有用的例子:
我们知道date/t(/t表示不要询问用户输入)的输出是象这样的:
Sat07/13/2002
现在我想分离出日期部分,也就是13:
for/f"tokens=3delims=/"%ain('date/t')do@echo%a
实际上把tokens后面换成1,2,3或4,你将分别得到Sat,07,13和2002。
注意delims=/后面还有个空格,表示/和空格都是分隔符。
由于这个空格delims必须是/f选项的最后一项。
再灵活一点,象本文开头提到的,将日期用2002-07-13的格式输出:
for/f"tokens=2,3,4delims=/"%ain('date/t')do@echo%c-%a-%b
当tokens后跟多个值时,将分别映射到%a,%b,%c等。
实际上跟你指定的变量有关,如果你指定的是%i,它们就会用%i,%j,%k等。
灵活应用这一点,几乎没有做不了的事。
4.可以用%~操作符将文件名分离成文件名、扩展名、盘符等独立部分
这个比较简单,就是说将循环变量的值自动分离成只要文件名,只要扩展名,或只要盘符等等。
例:
要将c:
\mp3下所有mp3的歌名列出,如果用一般的dir/b/s或for/r,将会是这样:
g:
\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-01下沙.mp3
g:
\mp3\Archived\05-18-01-A\游鸿明-下沙\游鸿明-0221个人.mp3
......
g:
\mp3\Archived\05-18-01-A\王菲-寓言\王菲-阿修罗.mp3
g:
\mp3\Archived\05-18-01-A\王菲-寓言\王菲-彼岸花.mp3
g:
\mp3\Archived\05-18-01-A\王菲-寓言\王菲-不爱我的我不爱.mp3
......
如果我只要歌名(不要路径和".mp3"):
游鸿明-01下沙
游鸿明-0221个人
......
王菲-阿修罗
王菲-彼岸花
王菲-不爱我的我不爱
......
那么可以用FOR命令:
for/rg:
\mp3%ain(*.mp3)do@echo%~na
批处理FOR命令中的变量2007年10月19日星期五04:
25FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!
先把FOR的变量全部列出来:
~I-删除任何引号("),扩展%I
%~fI-将%I扩展到一个完全合格的路径名
%~dI-仅将%I扩展到一个驱动器号
%~pI-仅将%I扩展到一个路径
%~nI-仅将%I扩展到一个文件名
%~xI-仅将%I扩展到一个文件扩展名
%~sI-扩展的路径只含有短名
%~aI-将%I扩展到文件的文件属性
%~tI-将%I扩展到文件的日期/时间
%~zI-将%I扩展到文件的大小
%~$PATH:
I-查找列在路径环境变量的目录,并将%I扩展
到找到的第一个完全合格的名称。
如果环境变量名
未被定义,或者没有找到文件,此组合键会扩展到
空字符串
我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.
比如:
FOR/F%%zIN('set')DO@echo%%z
这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz
至于前面的%~p这样的内容就是语法了!
好开始讲解:
~I-删除任何引号("),扩展%I
这个变量的作用就如他的说明,删除引号!
我们来看这个例子:
首先我们在桌面建立一个名字为temp.txt文本文件,在里面输入这些内容
"1111
2222"
"3333"
44"44
然后在建立个BAT文件代码如下:
FOR/F"delims="%%iIN(temp.txt)DO@echo%%~i
pause
执行后,我们看CMD的回显如下:
1111
2222"
3333
44"44
和之前temp.txt中的内容对比一下,我们会发现第一行和第三行的引号都消失了,这就是删除引号~i的作用了!
删除引号规则如下(BAT兄补充!
)
1、若字符串首尾同时存在引号,则删除首尾的引号;
2、若字符串尾不存在引号,则删除字符串首的引号;
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
%~fI-将%I扩展到一个完全合格的路径名
看例子:
把代码保存放在随便哪个地方,我这里就放桌面吧.
FOR/F"delims=="%%iIN('dir/b')DO@echo%%~fi
pause
执行后显示内容如下
C:
\DocumentsandSettings\Administrator\桌面\test.bat
C:
\DocumentsandSettings\Administrator\桌面\test.vbs
当我把代码中的%%~fi直接改成%%i
FOR/F"delims=="%%iIN('dir/b')DO@echo%%i
pause
执行后就会显示这些内容
test.bat
test.vbs
通过对比,我们很容易就看出没有路径了,这就是"将