自学批处理笔记

更新时间:2024-06-22 14:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

总目录:

自学批处理笔记(1)

自学批处理笔记(2) cd md rd

自学批处理笔记(3) dir copy 重定向符>>,>,<

自学批处理笔记(4) xcopy attrib

自学批处理笔记(5) del ren move

自学批处理笔记(6) echo pause rem exit

自学批处理笔记(7) set

自学批处理笔记——三种建立畸形文件夹的方法 计算机发展故事

自学批处理笔记(8) set 变量 cls tree

自学批处理笔记(9) edit fc comp more start

自学批处理笔记(10)date time color mode

自学批处理笔记(11) vol label format defrag chkdsk convert

自学批处理笔记(12)if

自学批处理笔记(13)goto for 变量延时

自学批处理笔记(14)assoc ftype pushd popd call shift

批处理的练习(1)

批处理的练习(2)图形界面的制作

自学批处理笔记(15)find findstr

批处理练习(3) 文件处理 制作进度条 判断字符长度

自学批处理笔记(16)常用符号详解 explorer

自学批处理笔记(17)schtasks /create

自学批处理笔记(18)schtasks /change /run /end /delete /query

批处理练习(4)

自学批处理笔记(19)path replace compact expand print cipher

一些小练习 补充:批处理实现退格功能

批处理应用——使电脑如飞

批处理中处理特殊字符的几种方法

批处理练习(5) 和 call echo 用法 及 2>&

DOS技巧(转) 系统默认环境变量中的路径

【试卷】自编批处理题目试卷,难度中(转)

自学批处理笔记(20) exit ver subst 替换字符串%var:*\的用法

自学批处理笔记——小问题积累1

温故知新——谈谈goto for call三种句式(转)

批处理中的预处理 变量嵌套(转)

批处理应用——按照歌手名分类整理文件的批处理分析(转)

批处理中的重定向符号以及句柄的使用方法和原理讲解(转)

命令小练习 批处理逃逸字符%的详细解释

自学批处理笔记(21) for中的特殊符号 set /p补充 sort shutdown

自学批处理笔记(22)tasklist taskkill

自学批处理笔记(1)

本来是学dos的,半途中发现了个批处理,就改行学批处理了。到现在以自学了2星期了。发现所谓的dos与批处理就是一家子,所以在后面我会把这两个杂在一起,毕竟他们的区别太微乎其微了。后面虽然是在讲批处理,但是我的笔记中也有很大一部分是在讲dos命令,也就是说后面的有些命令在批处理中用的并不是很经常,但是却在dos下很好用等。害怕自己学的东西会忘掉,也为了分享。做做笔记吧!自己也是个初学者,可能会有很多错误,大家发现请提出来!!

先回顾一下怎么打开dos界面吧: 1. 开始-程序-附件-命令提示符

2. 开始-运行-键入:cmd 或 command

运行的快捷键是:win+r 然后键入cmd 那个win键就是Ctrl与Alt中间的那个键,我这个小白刚开始时还不懂!

(试试看,其实这两个有区别的开始时我也没注意到,cmd会更好用) 如何建立批处理脚本:

在此之前都把文件后缀名都显示出来:在 我的电脑-工具-文件夹选项 里的 查看--隐藏已知文件类型的扩展名 的钩去了

1. 随便建立个文件,将文件名改为以 .cmd 或 .bat 结尾的文件。 2. 然后就是在这个脚本下写代码了(不也要直接打开,右击编辑) 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。

如何在cmd中复制和粘贴:

这个没什么好说的直接批处理之家转过来:

在CMD窗口中单击鼠标右键,出现快捷菜单,选择“标记”,(或者在CMD窗口的标题栏单击鼠标右键(或者左键单击标题栏左边的图标),出现系统菜单,选择“编辑”→“标记”),按住左键不放,选择需要复制的文字,注意被选中的部分将出现反白高亮显示的矩形框,被框中的区域才是所选择的内容,这种选择方式与记事本等编辑器不同。选择过程中可以随时点击鼠标左键重新选择起始位置,选择完毕后直接按回车或单击鼠标右键,被选中的内容即复制到剪贴板中。要粘贴则在右键菜单中选择“粘贴”即可。注意常规的Ctrl+C、Ctrl+V等快捷键在CMD中无效。

也可以在标题栏的系统菜单中选择“属性”→“选项”,把“编辑选项”中的“快速编辑模式”选中,确定后在出现的对话框中可选择“保存属性,供以后具有相同标题的窗口使用”,再次确定。在快速编辑模式下,单击鼠标右键不再出现快捷菜单,而是粘贴功能。而且直接用左键单击拖选即可进行“标记”。

自学批处理笔记(2) cd md rd 一. cd 路径

cd (不能打开文件,只进入文件夹) 参数:/d cd /d 完整的路径,可以包含盘符 cd 不含盘符的路径 cd 盘符 cd. 表示当前目录 cd.. 表示返回上一级目录 cd\\ 表示返回根目录

例子:我们在dos下进行学习,打开路径

比如我有个路径是:e:\\123\\360 当前的路径是默认的c:\\Documents and Serrings\\Administrator> 先进入指定的目录: cd e: cd 123\\360 也可以:cd /d e:\\123\\360 然后键入:cd..

这样就返回到了e:\\123中

当然了你若是输入了:cd\\ 则会返回到根目录了也就是e:盘了 至于cd.我就觉得没什么用了,至少现在是这样。

二. md 建立文件夹用的

md(常用来建立文件夹,也可以建立文件) md 文件夹 (在当前目录下建立文件夹)

md 文件夹 文件夹 (在当前目录下建立多个文件夹,其中文件夹名用空格隔开) md 路径 (在指定目录下建立文件夹)

md 路径 路径 (在指定的不同目录下建立多个文件夹)

md >路径\\文件名 (比较特殊,虽然会报错,但在指定的目录下的却建立了文件)

引用批处理之家:创建文件夹使用的是md命令,它的另一个写法为mkdir(由MakeDirectory演变而来) 格式为:md 文件夹名。 其 中, 文 件夹名可以使用带路径的格式。例如:md d:\\test, 也可以用 md test 在当前路径下建立test文件夹。如果要创建的文件夹带有空格或&, 需要用引号把文件夹名括起来,例如:md \、md \。如果不使用引号, 又会带来什么后果呢?测试的结果是:

1、如果文件夹名带空格,那么,md test abc 语句会在当前目录下创建test和abc这两个文件夹;利用这个特点,我们有时候可以收到化繁为简的奇效:如果要创建abc def xyz这三个文件夹, 直接使用 md abc def xyz 就行了,而无需连写三条md语句。当然,md abc;def;xyz或者md abc,def,xyz 这样的写法也是可以的。

2、如果文件夹名中含有&,那么,md abc&xyz 会创建abc这个文件夹,并提示说:'xyz'不是内部 或外部命令,也不是可运行的程序或批处理文件,这是因为,&是复合语句的连接符号,它把前后两

部分视为两条子语句了。

忠告:如果文件夹名含有特殊符号,请不要忘记使用双引号!

md还有一个比较方便的功能:创建中级目录。也就是说,md a\\b\\c这样的命令,可以在当前目录下建立文件夹a,然后,在a下建立文件夹b,b之下再建立文件夹c,一气呵成,而无需先md a之后,再cd a,然后md b,再cd b,接着cd b,然后md c。 例子:继续打开dos窗口键入:

比如你要在e:盘下建立“一号”这个文件夹: md e:\\一号

若要在e:盘下建立“一号”在“一号”里建立“二号”文件夹: md e:\\一号\\二号

当然你也可以在不同的地方建立多个文件夹: md e:\\一号 f:\\二号 (e:盘建立一号文件夹,f盘建立二号文件夹)

来建立文件: md >e:\\一号\\练习.doc (会报错,但却实在e:盘建立了一号文件夹,在里面有建立了一个doc文件)

三. rd (删除文件夹,不能删除文件) 参数 /s /q rd 参数 路径

这个比较简单了引用dos之家的教程:rd的另外一个写法是rmdir,源自ReMakeDirectory。使用的方法也很简单:rd 文件夹名 即可,例如:rd test。它支持带路径的文件夹名,例如:rd d:\\test。

有时候,rd并不能很好地完成任务:你让它删除test文件夹,它却傲慢地向你翻白眼:目录不是空的。不过,这也不能怨它偷懒不干活,只是它的脾气有点怪:如果要删除的文件夹下面还有子文件,你得给rd戴顶高帽,加个 /s 参数,它才会高高兴兴地帮你做事,所以,正确的写法是:rd /s test。Window XP中rd /s 这个已经将之前的一些操作系统中的deltree这个命令取代了。

如果你是个彻头彻尾的懒鬼,光是使用 rd /s test ,可能还是对它不甚满意,因为当你在删除带子文件的文件夹的时候,CMD总是不识时务地停下来,殷勤地问你:是否确认(Y/N)?非得等你输个字符敲下回车不可。命苦不能怨政府,点背不能怨社会,谁叫rd有那么大的威力呢,它一旦耍起流氓来,那是谁也拦不住的——rd有风险,删除须谨慎啊。好在微软对那些对删除十分有把握而又懒得要命的家伙体贴入微,提供了一个十分方便的参数 /q ,它取自quiet,官方解释为:安静模式,带 /S 删除目录树时不要求确认。这次再试试:rd /q /s test,真个是:弹指一挥间,灰飞烟灭,是不是有眼不见心不烦的酣畅感?

例子:打开dos窗口:

键入: rd e:\\一号 (这样就删除了e盘下的一号文件夹,当然了前提是一号文件夹必须是空的,否则不能执行成功)

若一号文件夹里不是空的你要把一号文件夹及里面的东西全部都删除了,可以键入: rd /s e:\\一号 (这样他会提示你y或n,是就y取消就n)

如果你觉得麻烦已经确定要删除了就: rd /s /q e:\\一号 (这样就不会有提示了安静的执行了命令)

自学批处理笔记(3) dir copy 重定向符>>,>,< 四. dir (显示目录文件和子目录列表) 参数: /A 显示具有指定属性的文件。

attributes D 目录 (我觉得就是值文件夹,就是查询列表中有

的)

H 隐藏文件 (英文hide) A 准备存档的文件 S 系统文件 (英文system) R 只读文件(英文read) - 表示“否”的前缀(如dir /a-h 就是不显示隐藏的文件) /B 使用空格式(没有标题信息或摘要)。

/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 停用分隔符显示。

/D 跟宽式相同,但文件是按栏分类列出的。 /L 用小写。

/N 新的长列表格式,其中文件名在最右边。 /O 用分类顺序列出文件。

sortorder N 按名称(字母顺序) S 按大小(从小到大) E 按扩展名(字母顺序) D 按日期/时间(从先到后) G 组目录优先 - 颠倒顺序的前缀

/P (英文page) 每次显示一个列表屏幕。要查看下一屏,请按键盘上的任意键。 /Q 显示文件所有者。

/S 显示指定目录和所有子目录中的文件。 /T 控制显示或用来分类的时间字符域。 timefield C 创建时间 A 上次访问时间 W 上次写入的时间

/W 以宽格式显示列表,在每一行上最多显示 5个文件名或目录名。当然没有原来的那么详细了

/X 显示为非 8dot3 文件名产生的短名称。格式是 /N 的格 短名称插在长名称前面。如果没有短名称,在其位置则 显示空白。 /4 用四位数字显示年

看到这么多已经晕了!其实有的没什么用至少到现在是这样,以后遇到了在记下来先来记这几个红色字的参数。 如果在没有参数或开关的情况下使用,则 dir 显示磁盘的卷标和序列号,后接磁盘上目录和文件列表, 包括它们的名称和最近修改的日期及时间。dir 可以显示文件的扩展名以及文件的字节大小。Dir 也

显示列出的文件 及目录的总数、累计大小和磁盘上保留的可用空间(以字节为单位)。这个也没什么好举例的,就是在dos窗口下输入:dir /a-d/b/w/s e: 就是查看e:下所有的文件当然我这复杂了点。当然了如果想同时查看多个路径下地文件的话个路径可以用空格隔开如:dir d:\\123 e:\\1 这样的话就可 以用一条命令两查看多路径的文件了。这个命令后面在批处理中也常用到。

五. 这里讲一下今天学的内容 重定向符号:< >和>>

当我们在dos窗口下查询帮助时,如键入dir /?发现讲的很好想把它保留到文本文档中,你会右击-标记 然后打开文本文档进行粘贴。这样就很麻烦了。我们其实可以用命令来执行这一切的。高效的方法就是使用定向符号:< >和>>。它们的作用都是改变各种提示信息的输出方向,把提示信息输出到指定的地方去——各种提示信息默认是输出到屏幕上去的。>的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)例如:tree /?>help.txt,这条命令语句就把 tree(后面学) 命令帮助 信息重定向到了help.txt文件中,help>nul 就把 help 命令的提示信息重定向到了空设备中去(nul表示空设备)

再如:使用命令c:\\>dir *.txt >1.txt 这时候1.txt的内容如下

驱动器 C 中的卷没有标签。 卷的序列号是 301A-1508 C:\\ 的目录

2003-03-11 14:04 1,005 FRUNLOG.TXT 2003-04-04 16:38 18,598,494 log.txt 2003-04-04 17:02 5 1.txt 2003-03-12 11:43 0 aierrorlog.txt 2003-03-30 00:35 30,571 202.108.txt 5 个文件 18,630,070 字节 0 个目录 1,191,542,784 可用字节

>和>>虽然都起到重定向提示信息的作用,但是,它们的作用稍有差别。单个的>表示以覆盖方式重定向提示信息也就是说如果目的地原来有内容,将把原来的内容清除掉,用新内容填充;>>表示以追加的方式重定向提示信息,也就是说如果目的地原来有内容,原有的内容将保持不变在原有内容之后追加新内容。例如:假 设d:\\test.txt中的 内容是:I Love batch。那么,在cmd窗口中,分别使用如下两条echo.me,too>d:\\test.txt 和 echo me,too>>d:\\test.txt,将会发现 使用第一条语句之后,test.txt中只有一行内容:me,too,而使用第二条语句之后,test.txt中将有两行内容,分别是I Love batch和me,too。(这段来自dos之家的教程)

我们来举个例子吧,记得之前我们学了用md来建立文件,会产生错误提示是吧那我们就用今天学的吧这些提蔽 了吧。输入代码:md >e:\\123.txt 2>nul 这样就把那个错误的信息给屏蔽了。也许你不懂得这里 2>nul的意思,那继续看吧。先看看nul是个什么东西?nul 就是null 无效的意思,如果你在dos下键入:md e:\\nul 你会发现没有错误提示,但是发现e:盘下并没有nul 这个文件夹。同样的你都无法建立nul 的文件及文件夹,如nul.txt等。所以上面的例子就是向nul 输入数据来屏蔽显示。为了使得屏幕上不出现无关的信息要屏蔽,我们把各种提示信息重定向到空设备中去,具体的代码是:

① 如果要屏蔽成功执行命令的信息,请在语句的最后加上代码 >nul。比如 copy a.txt d:\\test>nul ② 如果要屏蔽出错信息,请在语句最后加上代码 2>nul,需要注意的是,数字2前必须带空格。比如,md test 2>nul,如果当前目录已经存在文件夹test,那么,执行这条语句将不会出现错误提示;

③ 如果要同时屏蔽正确执行代码后产生的提示和出错时的信息,请在语句最后加上代码 >nul 2>nul。 比如,copy a.txt d:\\test>nul 2>nul 这条语句,无论命令是否成功执行,都不会在屏幕上出现任何提示 善用 nul 2>nul 句式,可以很方便地实现很多目的,比如创建文件夹的时候,无需先用if语句来检测是否已经

存在某个目录,直接 md test 2>nul 即可,可以提高代码的执行效率。而这个<是 从文件中而不是从控制台读取命令输入。例如: <1.txt >2.txt 就是读取1.txt的内容,然后又把它发送到2.txt中。还不懂的话,就有一个模糊的印象就好了,后面遇到其他的例子后就会慢慢的ok了。

补充:今天又学到了一些东东了,是在dos之家上学的。就是关于建立空文件的。大小不是0字节,实际上,从理论上来说,创建0字节文件的语句有无限多种,只要明白其中的奥妙,就可以随心所欲地构造出来,只是cd.>test.txt是最简洁的方法,构造0字节文件的奥妙在于:只要没有任何内容重定向到文件中去,0字节文件就会随着命令的执行而产生。比如dir 2>test.txt、arp >text.txt、abc 4>test.txt……,只要符合\任意内容+空格+2以上10以下的数字+>test.txt\的格式即可。需要注意的是,千万不要被屏幕上的各种出错信息所蒙蔽,我们的最终目的是产生0字节的文件,至于错误提示完全可以用 2>nul 去屏蔽。更详细的讨论请参考本人在CN-DOS发过的这篇帖子:可构造0字节文本文件的几条命令 。

以上半抄袭了,dos之家是我现在主要的学习地点了,也推荐下。下面看看例子吧: 还是在dos窗口下进行的:

echo 7>e:\\7788.txt 会显示错误的提示,当时命令成功执行了。echo是什么看不懂没关系后面会懂的

dir 4>e:\\236.doc >nul 屏蔽了错误提示,在e盘建立了236.doc 当然以上的dir 可以改成 rd md cd 等。

六. copy (文件复制,建立)

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B] [+ source [/A | /B] [+ ...]] [destination [/A | /B]] source 指定要复制的文件。

/A 表示一个 ASCII 文本文件。 /B 表示一个二进位文件。 /D 允许解密要创建的目标文件 destination 为新文件指定目录和/或文件名。

/V 验证新文件写入是否正确。 /N 复制带有非 8dot3 名称的文件时,

尽可能使用短文件名。

/Y 不使用确认是否要改写现有目标文件的提示。 /-Y 使用确认是否要改写现有目标文件 的提示。 /Z 用可重新启动模式复制已联网的文件。 以上是帮助菜单下的内容,也许你又一次晕了,该记下的就记吧。

常用语法:copy 原始路径1\\文件名1 复制后的路径2[\\文件名2] 表示将文件1复制到路径2中,文件2表示新文件名

copy nul 路径\\文件名 表示在路径下建立一个空文件

copy con 路径\\文件名 表示在路径下建立一个空文件,但是你会发现与上面有所不同,它会直接进入文 件中,要退出按F6或Ctrl+z 回车即可。

说明一下,copy可以使用通配符,这样他的功能就很强大了。copy只用来处理文件,不复制文件夹。

补充:这是在网上偶然看到的特殊用法,用来影藏文本文件的。看一下例子你就懂的了。

copy e:\\幸运草.mp3+f:\\秘密.txt e:\\幸运草.mp3 这样你就把秘密.txt文档里的内容隐藏到音乐中了,当你打开音乐后, 没有什么变化,照样听自己的歌。意思是吧两个文件合并到另一个文件中。那怎么查看呢,右击音乐文件-打开方式选择文本文档,会发现乱七八糟的东东,别理会,直奔最后,发现我们“秘密.txt”的内容就在最后。对了,记得原作者说那个文本文档最好要在前面留三个空行,这个我不知道为什么,不留似乎也没问题,反正我不懂。

对了以上我们看到了 copy 可以用 “+”将多个文件合并起来,这也是一个很好用的功能。还有一点就是若只有 copy 路径\\文件名 也就是没有后面的路径,那么表示将文件复制到当前的目录下。至于这个当前目录之前说过了,就是dos闪动光标前面的路径(好像这个是废话) 命令格式:copy /b 文件1+文件2+......文件N 合并后的文件名 命令讲解:使用\将多个相同或不同格式的文件合并为一个文件。 小提示:

1.在尾部隐藏了文本数据的图片文件,在使用了其他文件编辑器并保存后,隐藏的文本数据有可能丢失。 2.MP3文件在使用此方法连接后,就可以实现连续播放。

3.合成图片/歌曲这样的二进制文件必须使用/b参数(b代表Binary,二进制),否则将会失败;另一个合并参数是/a(ASCII,文本文件),只能用于纯文本的合并。两参数不能同时使用,二进制方式可以合并文本文件和二进制文件,而文本方式用于纯文本的合并。、

4.当进行软盘复制时,可在命令中加入\参数,这样可以减少因操作介质的问题而导致的数据写入失败。

例子:还是在dos窗口下进行的

1. 把D盘根目录下的test.txt和abc.txt两个文件的内容合并为test.txt,并保存到d:\\test目录下。(自己也试试)

copy d:\\test.txt+d:\\abc.txt d:\\test\\test.txt 2. 吧e:\\l练习\\里所有的doc文件全部复制到e:下。

copy e:\\练习\\*.doc e:\\ (当然了若你的当前目录就是e:\\呢么只要:copy e:\\练习\\*.doc )

3. 在e:\\练习\\下建立空的123.ppt 的空文件(用pp只为了说明t文件可以是其他的,不一定都是txt ) copy nul e:\\练习\\123.ppt (若nul 用con来换你就要再多输入Ctrl+z )

做到这里自己回顾一下其他的方法,建立文件的方法多的去了,之前的忘了没,去在看看吧! 4.把两首歌合并成一首连续的歌。

copy /b g:\\最初的梦想.mp3+g:\\冬天的秘密.mp3 g:\\合并后的歌.mp3 这样就把这两首歌合并了。主意别忘了参数b的使用。 回来补充下一些例子:

copy ..\\98 将父目录下的98子目录下的所有文件全拷到当前子目录 copy .\\97 当当前目录下的97子目录下文件全部拷到当前目录 copy . c:\\ 将当前目录下的所有文件拷到c盘根目录 . 意味着 *.* 文件

copy nul a.abc 将a.abc 文件清空(文件长度改为0) copy 文件名+con 向文本文件中追加命令或内容 copy con 文件名 创建文本文件(F6存盘退出)

继续补充个今天看到的:http://www.bathome.net/thread-11213-1-7.html

自学批处理笔记(4) xcopy attrib 七. xcopy

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/EXCLUDE:file1[+file2][+file3]...] source 指定要复制的文件。

destination 指定新文件的位置和/或名称。 /A 只复制有存档属性集的文件, 但不改变属性。

/M 只复制有存档属性集的文件, 并关闭存档属性。

/D:m-d-y 复制在指定日期或指定日期以后更改的文件。

如果没有提供日期,只复制那些源时间 比目标时间新的文件。 /EXCLUDE:file1[+file2][+file3]...

指定含有字符串的文件列表。每一个字符串 必须在文件的单独行中。如果有任何 字符串与要被复制的文件的绝对路径相符,那个文件将不会得到复制。

例如,指定如 \\obj\\ 或 .obj 的字符串会排除目录 obj 下面的所有文件或带有.obj 扩展名的文件。

/P 创建每个目标文件前提示。每创建一个就有一个确认是否要复制。 /S 复制目录和子目录,除了空的。

/E 复制目录和子目录,包括空的。(Empty空的,包括空的,我是这么记下来的) 与 /S /E 相同。可以用来修改 /T。 /V 验证每个新文件。 /W 提示您在复制前按键。

/C 即使有错误,也继续复制。(比如在复制正在使用的文件,用这个就不会有错误提示了)

/I 如果目标不存在,又在复制一个以上的文件, 则假定目标一定是一个目录。 /Q 复制时不显示文件名。

/F 复制时显示完整的源和目标文件名。就会出现********→********

/L 显示要复制的文件。但是没有进行复制,复制前用来看看要复制的是什么内容。 /G 允许将没有经过加密的文件复制到不支持加密的目标。 /H 也复制隐藏和系统文件。 /R 覆盖只读文件。

/T 创建目录结构,但不复制文件不包括空目录或子目录。就是复制有文件的文件夹,文件一个都么有。

/T /E 包括空目录和子目录。就是复制所有的文件夹,不带一个文件。 /U 只复制已经存在于目标中的文件。

/K 复制属性。一般的 Xcopy 会重置只读属性。 /N 用生成的短名复制。

/O 复制文件所有权和 ACL 信息。 /X 复制文件审核设置(隐含 /O)。 /Y 复制文件审核设置(隐含 /O)。 现存目标文件。

/-Y 导致提示以确认改写一个 现存目标文件。

/Z 用重新启动模式复制网络文件。

命令行开关 /Y 可以预先在 COPYCMD 环境变量中设置。 这可能被命令行上的 /-Y 改写。

以上是帮助菜单下的东西,为了你看的懂我加了一些解释,这个是目前最恐怖的一个了,这是当然了它是copy的升华功能更牛逼的。这个我今天刚学也没什么体会与你们说了,自己看看这些参数,把自己认为有用的背了,剩下的以 后再说吧。有些参数不是看了就懂的,自己去试试吧!!!

例子:自己也不懂就用dos试了试,我建立了这样的东西当做例子吧: e:\\555\\1 : 1.doc 1.txt

1.1(文件夹) : 1.1.1(文件夹) :1.1.1.txt 1.1.txt

1.2(文件夹) :1.2.1(空文件夹) 1.2.doc 1.3(空文件夹)

1. xcopy e:\\555\\1 e: 可是它只是复制了文件夹1中的文件到e盘,而子文件夹和里面的文件都没有被调动。 也就是在e:盘中只出现了1.doc 和1.txt 。

2. xcopy e:\\555\\1 e: /s 这次加了参数/s,则e:盘中出现了1.doc,1.txt,1.1,1.2,虽然子文件都在,但是所有的空文件夹都没有复制过来。没有1.36和1.2里的1.2.1

3. xcopy e:\\555\\1 e: /e 这次空文件夹也有了,觉得有点麻烦一堆都在e:下,有没有办法放在一个文件夹了?

4. xcopy e:\\555\\1 e:\\666 /e 本来是想复制重命名的,结果出现了选择,分别试了式,然后选择d就行了。

5. 如只是单纯地复制 E:\\ 盘上所有文件到 D:\\ 盘上,就输入“ xcopy e:\\*.* d: /s /h \就行啦!如果在复制过程中,你不要他复制文件啦!那就按键盘热键“Ctrl \二个热键 来中断复制。 6. 如果想把E:\\ 盘上所有文件复制到D:\\盘上,分为今天复制一点,明天再接着复制一些,后天再接着复制一些。或者是某种原因上次没有复制完成,今天想接着复制。(这种情况是经常在复制文件中出现的)那可怎么办才好呢?那就输入“ xcopy e:\\*.* d: /s /h /d /y ”就行啦。他能查出那些文件是已经复制过去啦,那些文件还没有复制过去的。 ( 5,6来自网络 )

八. attrib的使用

作用:修改文件或文件夹属性

格式:attrib 属性 盘符\\路径\\文件名 参数 属性: R 只读文件属性。 A 存档文件属性。 S 系统文件属性。 H 隐藏文件属性。

参数: /S 处理当前文件夹及其子文件夹中的匹配文件。 /D 也处理文件夹。

这些参数和属性都可以多个同事使用,并且我们可以使用通配符来对多文件进行选择性的修改。 属性的要与不要都用+或-来进行选择。例如给文件1.txt增加属性使之为影藏文件只要:attrib +h 1.txt 再如要将e:\\1文件夹及所有的子文件都变成系统属性就:attrib +s e:\\1 /s /d 如要把所有的e:盘下的文本文件都变为隐藏的就:attrib -s +h e:\\*.txt /s /d

自学批处理笔记(5) del ren move 八. del 删除文件

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names names 指定一个或数个文件或目录列表。通配符可被用来 删除多个文件。如果指定了一个目录,目录中的所 有文件都会被删除。

/P 删除每一个文件之前提示确认。 /F 强制删除只读文件。

/S 从所有子目录删除指定文件。

/Q 安静模式。删除全局通配符时,不要求确认。(quiet 安静的) /A 根据属性选择要删除的文件。

attributes R 只读文件 (read) S 系统文件(system) H 隐藏文件 (hide) A 存档文件(汗!不懂得!剩下的就是他了)

- 表示“否”的前缀

如果命令扩展名被启用,DEL 和 ERASE 会如下改变: /S 开关的显示句法会颠倒,即只显示已经 删除的文件,而不显示找不到的文件。

以上是帮助里的内容,其实帮助很好用的!这个之前学过了觉得没有什么难得,但是很重要了。

格式:del 文件路径\\文件名 是用来删除文件用的。 但是不能删除想系统,隐藏等特殊的文件所以就用到了上面的参数喽。也支持通配符。

例子:dos窗口下输入 del e:\\*.* 就把e:盘里的所有文件给删除了,不包括子文件夹里的文件。 del e:\\ 效果一样的。 觉得还要 进行确认很麻烦那就:del /q e:\\ 这样就安静多了,后来发现这个参数似乎放在后面也行:del e:\\ /q

现在我要把1下的所有文件都删除,把保留文件夹要不直接 rd 了。输入:del /s e:\\1\\*.* 怎么样都删了吧,同时也发现了 /q 的作用了吧!如果文件多还要一个一个的进行确认,那不累死啊。继续在e:盘建立一个隐藏文件1.txt 输入:del e:\\1.txt /a ok删除了。如果不想删除一些属性的文件就用“-”例如:del /a-s e:\\*.*

当然了删除文件是件十分危险的事情,稍有不慎,就可能删掉了重要的文件,所以,在执行删除操作的时候,需要小心谨慎。如果需要在删除之前进行确认的话,可以添加一个参数:/p 。当然,对于十分有把握的删除操作,并不需要逐一确认的,可以选择静默删除模式,这时候,需要使用参数:/q,也就是 quiet 的缩写形式

九. ren 重命名文件,文件夹

格式:ren 盘符\\路径[文件名] 新的名字

这个用起来比较简单没什么好说的。就是要注意当文件或文件夹含有特殊符号的时候用''也就是引号括起来。

例如有个文件夹叫“English Note” 要重命名为123时输入:ren \Note\123 回来补充一下:猫死用通配符可以自动匹配看看例子吧: ren c:\\work\\r*.* document.* 执行后会自动匹配后缀。

有趣的例子:g盘建立一个1的文件夹,在批处理或dos来重命名成没有名字的文件夹:

ren g:\\1 \这样就又一个没有名字的文件夹了,如果我们使用看不见的文件夹图标(机子上有,右击更改图标)那么我们就建立了一个看不见的文件夹了!可是怎么删除这个文件夹???用rd 怎么删除?没名字rd什么呢。这里用到了短名先用dir /ad/x 路径 /x是显示短名,然后用rd+短名 来删除,例如:rd 0200~1 /q 就把当前的空名字文件夹删除了。 几个例子:

(1)ren 10.pdf *0.c 得 10.c (2)ren 10.pdf *p.c 得 10.p.c (3)ren 10.pdf *d.c 得 10.pd.c (4)ren 10.pdf *mm.c 得 10.pdfmm.c ren 2000.pdf ?f.pdr 得 2f.pdr ren 2000.pdf ???f.pdr 得 200f.pdr ren 2000.pdf ????????f.pdr 得 2000f.pdr 十.

move 移动文件或文件夹

参数:/y 禁止提示您确认要覆盖现存目标文件。 /-y 提示您确认是否要替代现存的目标文件。 格式:move 盘符\\路径[\\文件名1] 新路径[\\新文件名2]

表示将文件1移动到新路径下[并重命名]

move 盘符\\路径[\\文件名1]

这表示将文件1移动到当前的目录里

当然了和前面一样文件名含有特殊符号是用引号括起来。当文件2存在时表示替换。还有一点就是move也支持通配符* ?这样我们就可以移动一堆文件了。

例子:move e:\\1.txt e:\\1\\ 表示把e盘里的1.txt文件剪贴到e:盘里文件夹1里面

假如e:\\1\\里已经有1.txt那么就表示用e:\\1.txt 来替换 e:\\1\\1.txt 她会出现是否替换的提示。如果你想替换又不想出现确认信息那么就用参数 /y 。这样替换时就很安静了。

自学批处理笔记(6) echo pause rem exit

现在来插入批处理常用的命令,毕竟之前的一些主要是针对dos窗口的命令,而我主要是学习批处理,为了不离题这里先来介绍批处理常用的命令。

十一. pause

作用:暂停批处理程序,并显示以下消息: 效果:请按任意键继续. . .

实例:建立一个批处理文件1.bat输入:pause 保存,双击打开显示了: E:\\>pause 请按任意键继续. .

当你按下任意键因为后面没有内容了所以就退出了。

如果要显示其他提示语而不想要显示“请按任意键继续”,可以这样用: Echo 其他提示语 & pause > nul

十二. echo

作用:显示信息,或将命令回显打开或关上。 ECHO [ON | OFF] ECHO [message]

要显示当前回显设置,键入不带参数的 ECHO。 为了理解,建立两个批处理文件分别输入:

echo 11111 echo off pause echo 11111 pause 保存打开结果分别为:

E:\\>echo 11111 E:\\>echo off

11111 11111

E:\\>pause 请按任意键继续. . . 请按任意键继续. . .

但是这里的 E:\\>echo off 这个又该如何不显示呢?这里我们就用到了 @echo off 这个是批处理中几乎都用的,这个一般都写在批处理文件的第一行。 懂得了基本的那就继续:

1. 用echo来输出空行:格式 echo.(echo后加个点,相当于空格键)这里的点可以用,:;”/[\\]+等任一符号替代。

2. 用echo答复命令中的提问:格式 echo 答复语|命令

例如:我们删除文件 del e:\\1.txt 会出现确认信息,我们可以用 echo y|del e:\\1.txt 来提前回答。当然了这道题我们可以用参数解决更方便。再如echo.相当于回车:在dos窗口下输入echo.|time 这样就不要求你再输入新的日期了

3. 用echo想文本文档中添加内容:echo 内容>>路径文件名 还有一些我也没看懂,貌似不常用(还是得写出来以后再看): 4. 向打印机输出打印内容或打印控制码

格式:ECHO 打印机控制码>PRN 和 ECHO 打印内容>PRN

下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推:

C:>ECHO +156+42+116>PRN(输入下划线命令FS*t) C:>ECHO +155@>PRN(输入初始化命令ESC@) C:>ECHO.>PRN(换行)

5. 使喇叭鸣响 C:>ECHO ^G

“^G”是用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。

6. 执行ESC控制序列修改屏幕和键盘设置

我们知道DOS的设备驱动程序ANSI.SYS提供了一套用来修改屏幕和键盘设置的ESC控制序列。如执行下述内容的批处理程序可以把功能键F12定义为DOS命令“DIR/W”,并把屏幕颜色修改为白色字符蓝色背景。

@ECHO”←[0;134;”DIR/W”;13p @ECHO”←[1;37;44m

(注:批处理文件中“←”字符的输入方法是在编辑状态下按Alt中小键盘上的27)

这里在说下@的用法:他其实和echo off 很像,但是@只能影藏单行的命令源代码。而echo off是影藏以下全部。

十三. rem 作用:后面的内容起注释作用

没什么好说的就是用来注释的,不起任何命令作用。 当然了还有很多的注释方法如:

1.rem 内容 2.echo 内容>nul

3.:: 内容(是两个英文冒号)

十四. exit 退出(没什么好说的) EXIT [/B] [exitCode]

/B 指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个 批处理脚本外执行,则会退出 CMD.EXE

exitCode 指定一个数字号码。如果指定了 /B,将 ERRORLEVEL 设成那个数字。如果退出 CMD.EXE,则用那个数字设置 过程退出代码。

作业:1.用批处理输出:123456

2.用 echo 在e:\\下建立1.txt文件并不显示提示信息(有点抠之前的内容) 答案:1.在批处理文件中输入: 2.在批处理文件中输入: @echo off @echo off

echo 123456 echo 2>e:\\1.txt>nul

pause rem之前的用任意内容+空格+2以上10以下

rem的数字+>test.txt来建立文件和nul的用法

pause

自学批处理笔记(7) set

十四. set 定义变量 参数:/a /p

没有参数时:set 变量名=变量内容

直接键入\会显示系统化境变量及当前环境变量

可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配 SET 命令已使用的名称的所有变量的值。例如: SET P

会显示所有以字母 P 打头的变量

如果在当前环境中找不到该变量名称, SET 命令将把 ERRORLEVEL设置成 1。

注意:1.SET 命令不允许变量名含有等号。

2.赋空值: set \

3..养成好的习惯,以免多赋值一个空格出错. 比如: set str=abc 时加上一对双引号 set \

set 常用的两个带参数格式:set /a 表达式

set /p 变量=(提示) (一) set /a

/A 命令选项指定等号右边的字符串为被评估的数字表达式。该表达式 评估器很简单并以递减的优先权顺序支持下列操作:

() - 分组(这个就是数学中的括号) * / % - 算数运算符 + - - 算数运算符 << >> - 逻辑移位 & - 按位“与” ^ - 按位“异” | - 按位“或” = *= /= %= += -= - 赋值 &= ^= |= <<= >>= , - 表达式分隔符

下面来介绍一下这些符号的用法。*是乘号 /是除号 没什么好说的。但是这个%提一下,在批处理文件中我们不是用%而是用%%

是用来求余用的。举个例子: @echo off

set /a num=6%%4

echo %num% rem这里的%num%是调用变量num,以后使用变量都用%变量名% pause

这样结果就是输出了2。关于求余再举几个例子,毕竟与有的编程里的求余不一样:10%%(-3)=1 ;(-10)%%3= -1

百度提问了一下发现:取余符号第二个操作数只能是正数,负数的话会自动取绝对值后再执行计算。 再看看逻辑位移:注意在批处理中或命令行下要加上一对双引号\或用^对<,>进行转义. 例如:set /a a=15\%a%就等于30

这是因为:15=bin(00 00000 00000 00000 00000 00000 01111) 左移1位就成了bin(0 00000 00000 00000 00000 00000 011110)

而bin(0 00000 00000 00000 00000 00000 011110)=2^4+2^3+2^2+2^1=30 <<,>> 逻辑移位.用途是使二进制向左或向右移位. 如十进制20的二进制是1 0100, 向左移一位10 1000,向右移一位01 010. 无符号数用0填充空出来的高位.

我们发现,左移一位后的二进制10 1000转换成十进制后正好是20*2的值, 而右移一位后01 010的十进制也刚好是20/2的值.

不要写成了set str=”a” 这样str的值是”a”(包含了双引号)

因为移位的速度非常快,在计算中如遇到*2或/2的时候不如这样写:

set /a 30 ^<^< 1 ::左移1位,同set /a 30*2 set /a 30 ^>^> 1 ::右移1位,同set /a 30/2

其实还有:

set /a 30 ^<^< 2 ::左移2位,同set /a 30*4 set /a 30 ^>^> 2 ::右移2位,同set /a 30/4 . .. ...

>>写成^>^>,是因为在批处理中>或<是特殊符号需通过^转义.

而对于逻辑运算符:异^(相同则0) 或|(有 1则1) 非!(0取1,1取0) 与&(有0则0) 符号都必须用\引号)括起来才行

例子:set /a num=15“^\结果为10 set /a num=15\结果为5 计算过程:15:01111 15:01111 5:00101 5:00101 结果: 01010 00101

二进制的01010化为十进制为10 二进制的00101化为十进制为5 再看*= /= %= += -= &= ^= |= <<= >>= 这些都一样,都是简写。比如:set /a num+=2 就等价于 set /a num=%num%+2。.

表达式分隔符“,”这个运算符可以用来简化代码:如: set /a a=1

set /a b=2 就可以化简为 set /a a=1,b=2,c=3 set /a c=3

注意:1.DOS计算只能精确到整数

2.DOS计算只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。

3.set /a 支持多条算式,所以自带解释变量的功能,引用变量时可以直接使用变量名无需经过 cmd 预处理,但是当引 用的变量名以数字开头时会出错。例如:已经定义好的变量a=1 b=2 c=21 那么要计算1+2+21我们不用:

set /a s=%a%+%b%+%c%只要set /a s=a+b+c就行了。这是后面遇到的,回过来补充一下。

今天偶然看到了set /a 的一个特殊的用法:set /a a=!b它所起的作用就是将任意结果值变为0和1,当其运算的对象值不为0时,其运算结果为0,只有当其运算的对象值为0时,其运算结果才为1。如果你不是很明白就请在cmd中set /a \,然后任意更换b的值看a值的变化吧。

(二) set /p 变量名=提示 作用:变量的内容可由使用者自己来定义 做个批处理文件:@echo off

set /p a=请输入您的姓名 echo 您的姓名是:%a% pause 试试你就知道是干什么的了

还有就是 set /p a=<2.txt 那么他就会输出2.txt里德第一行的内容(后面遇到的 回来补充下)

看不懂的给个另外教程链接:http://www.bathome.net/thread-9721-1-8.html

来看一个题目:求一个变量的长度(不多于9个,多余9个的以后再说) 看一个答案: @echo off set str=exist

set n=%str?76543210

echo,%str% 字符个数为 %n:~9,1% 个 pause 不知道看的懂不。

解释一下,字符+9876543210是用来与变量str进行互补的。再想想看..... 在扩张一下: @echo off set str=abcde set

st2=%str%%str@39383736353433323130292827262524232221201918171615141312111009080706050403020100

echo,%str% 共有 %st2:~80,2% 个字符 pause 相同的道理

这里不能用 set /p “a=<2.txt” 因为双引号会吧命令当作字符

自学批处理笔记——三种建立畸形文件夹的方法 计算机发展故事

这个是我从批处理之家里转来的,小有修改,特此声明。貌似也不是原创。只要能学的就拿来了。

以下这三中方法都是在windows下的cmd中执行 第一种: md 文件名..\\

例如在D盘下建立一个畸形文件夹smilediao执行下面的命令 md D:\\smilediao..\\

此文件夹在windows图形界面下既不可以打开又不可以删除。 打开方法:

在运行里输入“D:\\smilediao..\\” 可以用360强力删除。 第二种: md 文件名...\\

例如在D盘下建立一个畸形文件夹smilediao执行下面的命令 md D:\\milediao...\\

大多数对付autorun病毒的批处理就是利用了这个文件夹(大概的方法就是建立一个名为autorun.inf的文件夹,然后在该文件夹里面建立一个这样的畸形文件夹)

此文件夹在windows图形界面下可以打开,但是不可以删除。 打开方法:

在运行里输入 “D:\\smilediao...\\” 第三种: md com1\\

注意:此文件夹的名称必须是com1不可以是别的名称。至于为什么本论坛里有解释,我就不在这里多说了。 例如在D盘下建立一个畸形文件夹com1执行下面的命令 md D:\\com1\\

此文件夹可以打开但是不能在windows图形界面下删除。 下面我将说一下他们的删除方法 第一种的删除方法

执行命令rd D:\\smilediao..\\ 或者rd /s /q D:\\smilediao..\\ 第二中的删除方法

执行命令rd D:\\smilediao...\\ 或者 rd /s /q D:\\smilediao...\\ 第三种的删除方法 执行命令rd \\\\.\\D:\\com1

总结:动动脑子,可以很好的利用这些畸形文件夹!呵呵。。。

再看看一个长篇的故事吧,我想会有收获的

源地址是:http://www.bathome.net/thread-2101-1-13.html 自己有耐心的看看,我觉得写的很好,长长见识!!!

自学批处理笔记(8) set 变量 cls tree set的基本用法讲了,继续:

1.%变量名:部分内容=新内容% 作用:修改变量部分内容 例如:@echo off set \我是小明\ set \明=丁%\

echo %b% pause 则结果为:我是小丁

注意:set的替换不区分大小写也就是说 set a=%str:a=b%那么他会将所有的a和A都换为b。 那么有时候要进行大小写的互换我们又该怎么办,我是用if,if是区分大小写的。

2.%变量名:~x,y% 作用:截取变量部分内容并使用它(x y都为数字,表示从截取x后的y位) 例如:set \那么 set “b=%a:~1,3%” 则b=234 set “b=%a:~1,-1%” 则b=2345678 set “b=%a:~1%” 则b=23456789

为了加强理解把下面代码粘贴到批处理文件里(来自批处理之家): @echo off&color 1f&rem num=15 nums=30 mode con: cols=80 lines=35 set \set \ \

set \ \rem 第一屏 舍弃 cls&echo 第一屏 舍弃

echo\\&echo %num% var=%var%&echo\\ for /l %%i in (1 1 3) do call :dan %%i echo\\

for /l %%i in (0 1 1) do call :yi %%i echo\\

for /l %%i in (0 1 2) do call :_yi %%i

echo ~ 波浪号后面的数字:为正数表示舍弃变量的前位; echo , 逗号后面的数字为正数表示取变量的舍弃以后的前几位; echo , 逗号后面为负数表示舍弃变量的后几位 echo\\&echo\\&pause&color 1e rem 第二屏 取 cls&echo 第二屏 取

echo\\&echo %num% var=%var%&echo\\ for /l %%i in (-1 -1 -3) do call :dan %%i echo\\

for /l %%i in (-4 -1 -6) do call :er %%i echo\\ call :_er -8

echo ~ 波浪号后面直接跟负数表示取变量的后几位

echo , 逗号后面的数字为正数表示取变量的舍弃以后的前几位; echo , 逗号后面为负数表示舍弃变量的后几位 echo\\&echo\\&pause&color 1f rem 第三屏 替换 删除 cls&echo 第三屏 替换 删除

set \echo\\&echo %num%var=%var% echo\\ call :san

echo = 号左边为要替换掉的字符, 右边为需替换来的字符

echo = 号左边要替换掉的字符前面加个*号,代表第一次出现的字符及其前面的所有字符 echo\\

echo ========= 演示完毕 ========= 按任意键退出 ========== pause>nul exit :dan

set shu=%1

if %shu% lss 0 (set aa=取&set ji=最后) else set aa=舍弃&set ji=前 if \set str1=%%var:~%1%%%num%

set str2=a%var的%ji%%shu%位%nums% call set str3=%%var:~%1%%%num%

call echo %%str1:~0,15%% %%str2:~0,30%% %%str3:~0,15%% goto :eof :yi

set shu=%1

if %shu% lss 0 (set aa=取&set ji=最后) else set aa=舍弃&set ji=前 for /l %%i in (1 1 3) do (

set str1=%%var:~%1,%%i%%%num%

set str2=a%var的%ji%%shu%位之后取%%i位%nums% call set str3=%%var:~%1,%%i%%%num%

call echo %%str1:~0,15%% %%str2:~0,26%% %%str3:~0,15%% if %%i==3 echo\\ ) goto :eof :_yi

for /l %%i in (-1 -1 -3) do (

set str1=%%var:~%1,%%i%%%num% set str2=舍弃var的前%1位和%%i位%nums% call set str3=%%var:~%1,%%i%%%num%

call echo %%str1:~0,15%% %%str2:~0,28%% %%str3:~0,15%% if %%i==-3 echo\\ ) goto :eof :er set sss=%1 set sss=%sss:~1% for /l %%i in (1 1 3) do (

set str1=%%var:~%1,%%i%%%num%

set str2=从var的倒数%sss%位开始取%%i位%nums% call set str3=%%var:~%1,%%i%%%num%

call echo %%str1:~0,15%% %%str2:~0,24%% %%str3:~0,15%% if %%i==3 echo\\ ) goto :eof :_er set sss=%1 set sss=%sss:~1% for /l %%i in (-1 -1 -3) do (

set str1=%%var:~%1,%%i%%%num%

set str2=从var的倒数%sss%位开始并舍弃最后%%i位%nums% call set str3=%%var:~%1,%%i%%%num%

call echo %%str1:~0,15%% %%str2:~0,20%% %%str3:~0,15%% if %%i==-3 echo\\ ) goto :eof :san

set str1=%%var:\set str2=删除var中的所有^\号%num% set str3=%var:\

call echo %%str1:~0,13%% %%str2:~0,23%% %%str3:~0,30%% set str1=%%var:\\=%%%num% set str2=删除var中的所有\\号%num% set str3=%var:\\=%%nums%

call echo %%str1:~0,13%% %%str2:~0,23%% %%str3:~0,30%% set str1=%%var::=%%%num% set str2=删除var中的所有:号%num% set str3=%var::=%%nums%

call echo %%str1:~0,13%% %%str2:~0,23%% %%str3:~0,30%% echo\\

set str1=%%var:\好%%%num%

set str2=替换var中的所有^\号为好字%num% set str3=%var:\好%%nums%

call echo %%str1:~0,12%% %%str2:~0,20%% %%str3:~0,30%% set str1=%%var:\\=好%%%num%

set str2=替换var中的所有\\号为好字%num% set str3=%var:\\=好%%nums%

call echo %%str1:~0,12%% %%str2:~0,20%% %%str3:~0,30%% set str1=%%var::=好%%%num%

set str2=替换var中的所有:号为好字%num% set str3=%var::=好%%nums%

call echo %%str1:~0,12%% %%str2:~0,20%% %%str3:~0,30%% echo\\

set str1=%%var:*\set str3=%var:*\

echo 删除var中的第一次出现的^\号及其前面的所有字符 call echo %%str1:~0,15%% %%str3:~0,30%% echo.

set str1=%%var:*\\=%%%num% set str3=%var:*\\=%%nums%

echo 删除var中的第一次出现的\\号及其前面的所有字符 call echo %%str1:~0,15%% %%str3:~0,30%% echo.

set str1=%%var:*:=%%%num%

set str3=%var:*:=%%nums%

echo 删除var中的第一次出现的:号及其前面的所有字符 call echo %%str1:~0,15%% %%str3:~0,30%% echo\\

set str1=%%var:*\set str3=%var:*\

echo 替换var中的第一次出现的^\号及其前面的所有字符为ppp call echo %%str1:~0,15%% %%str3:~0,30%% echo.

set str1=%%var:*\\=ppp%%%num% set str3=%var:*\\=ppp%%nums%

echo 替换var中的第一次出现的\\号及其前面的所有字符为ppp call echo %%str1:~0,15%% %%str3:~0,30%% echo.

set str1=%%var:*:=ppp%%%num% set str3=%var:*:=ppp%%nums%

echo 替换var中的第一次出现的:号及其前面的所有字符为ppp call echo %%str1:~0,15%% %%str3:~0,30%% echo\\ goto :eof

3.再来补充一个我刚积累的一个用法:就是 set /p 变量名=内容

set /p a=我是谁

则结果为:我是谁????

又学到个:set /p a=<2.txt 将当前目录2.txt中的第一行内容赋值给变量a(这个知识好像前面已经出现过了)

4.dos一些系统的变量:(我们在定义变量是避免用这些变量名来命名变量)

多的要死百度一下会吓死掉,没必要记那么多,记一些常用的,其他的遇到了再说。 像date,time,cd,errorlevel等是必须的。还有就是%0到9这些都是默认的变量。 以下是来自批处理之家中一个对这些变量的解释: 另外还有一些系统变量,他们是代表一个意思,或者一个操作!

他们分别是%0 %1 %2 %3 %4 %5 ......一直到%9 还有一个%*

%0 这个有点特殊,有几层意思,先讲%1-%9的意思.

%1 返回批处理的第一个参数 %2 返回批处理的第二个参数

%3-%9依此推类

反回批处理参数?到底怎么个返回法?

我们看这个例子,把下面的代码保存为test.BAT然后放到C盘下

@echo off

echo %1 %2 %3 %4 echo %1 echo %2 echo %3 echo %4

进入CMD,输入cd c:\\

然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数

注意中间的空格,我们会看到这样的结果:

我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数

对比下代码,%1就是”我是第一个参数” %2就是”我是第二个参数” 怎么样理解了吧!

这些%1和%9可以让批处理也能带参数运行,大大提高批处理功能!

还有一个%* 他是什么呢?他的作用不是很大,只是返回参数而已,不过他是一次返回全部参数的值,不用在输入%1 %2来确定一个个的 例子 @echo off echo %*

同样保存为test.bat 放到C盘 进入CMD,输入cd c:\\

然后输入 test.bat 我是第一个参数 我是第二个参数 我是第三个参数 我是第四个参数

可以看到他一次把全部参数都显示出来了

好现在开始讲那个比较特殊的%0

%0 这个不是返回参数的值了,他有两层意思!

第一层意思:返回批处理所在绝对路径 例子: @echo off echo %0 pause

保存为test.BAT放在桌面运行,会显示如下结果

\桌面\\test.bat\

他把当前批处理执行的所在路经打印出来了,这就是返回批处理所在绝对路径的意思

第二层意思:无限循环执行BAT 例子: @echo off net user %0

保存为BAT执行,他就会无限循环执行net user这条命令,直到你手动停止.

龙卷风补充:其实%0就是第一参数%1前面那个参数,当然就是批处理文件名(包括路径)。

以上就是批处理中的一些系统变量,另外还有一些变量,他们也表示一些功能, FOR命令中的那些就是,FOR变量已经说过,就不讲了. 再补充一个我遇到的一个系统变量:

%random% 取随机数:0 到32767 之间的任意十进制数字。如果我们要取0到10的随机数的话就:

set /a num=%random%%

也就是对这个变量进行求余计算。同理我们可以相同的方法取得任意区间的随机数了。

继续以前的dos命令:

十五. cls 作用:清屏用的没啥好说的,记了很常用

十六. tree 作用:以树图显示文件信息 格式:tree 盘符\\路径 参数 参数: /F 显示每个文件夹中文件的名称。 /A 使用 ASCII 字符,而不使用扩展字符。 例子:用tree查看e:盘并把结果保存到e下的1.txt中 @echo off

tree e:>e:\\1.txt

echo 成功生成1.txt!请查看 pause>nul

补充:一个技巧今天刚学到的:dos下 Tab 键的妙用

比如我要进入e:\\progres file这个文件夹我们要键入cd /d e:\\progres file很长啊打的累 其实我们只要cd /d e:\\pro然后按下Tab键就会自动帮你补齐了。自己试试看

自学批处理笔记(9) edit fc comp more start

十八. edit 编辑文本文档(这个不多说,批处理中貌似也少用) EDIT [/B] [/H] [/R] [/S] [/] [/?] [file(s)]

/B - Forces monochrome mode.

/H - Displays the maximum number of lines possible for your hardware. /R - Load file(s) in read-only mode. /S - Forces the use of short filenames.

/ - Load binary file(s), wrapping lines to characters wide. /? - Displays this help screen.

[file] - Specifies initial files(s) to load. Wildcards and multiple filespecs can be given.

十九. fc comp

FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn] [drive1:][path1]filename1 [drive2:][path2]filename2 FC /B [drive1:][path1]filename1 [drive2:][path2]filename2

/A 只显示每个不同处的第一行和最后一行。 /B 执行二进制比较。 /C 不分大小写。

/L 将文件作为 ASCII 文字比较。 /LBn 将连续不匹配的最大值设为指定 的行数。

/N 在 ASCII 比较上显示行数。 /OFF[LINE] 不要跳过带有脱机属性集的文件。 /T 不要将 tab 扩充到空格。

/U 将文件作为 UNICODE 文字文件比较。 /W 为了比较而压缩空白(tab 和空格)。 /nnnn 指定不匹配处后必须连续匹配的行数。 [drive1:][path1]filename1

指定要比较的第一个文件或第一个文件集。 [drive2:][path2]filename2

指定要比较的第二个文件或第二个文件集。

这是用来比较文件用的,comp也一样,这个我不做详细的介绍。貌似两个都不常用。自行了解。

二十. more (我不做详细介绍,用来显示文本内容) MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]] MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

[drive:][path]filename 指定要逐屏显示的文件。 command-name 指定要显示其输出的命令 。 /E 启用扩展功能

/C 显示页面前先清除屏幕 /P 扩展 FormFeed 字符 /S 将多个空白行缩成一行

/Tn 将跳格键扩展成 n 个空格(默认值为 8) 命令行开关可以出现在 MORE 环境变量中。 +n 从第 n 行开始显示第一个文件

files 要显示的文件列表。 用空格分开列表中的文件。 如果扩展的功能已经启用,在 -- More -- 提示处会接受下列 命令:

P n 显示下 n 行 S n 略过下 n 行 F 显示下个文件 Q 退出 = 显示行号 ? 显示帮助行 显示下一页 显示下一行

二十一. start

对于一些还需要使用DOS程序的人来说,Windows XP中提供了一个类似Win9X的“MS-DOS方式”,现在又叫“命令提示符”,它在“开始/所有程序/附件”中。利用它我们就可以启动许

多程序,同时还提供了一个专门在DOS状态下启动程序的命令Start,它启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start将打开第二个命令 提示符窗口。start命令有许多参数,它的各个参数的含义如下: \指定在“命令提示符”窗口标题栏中显示的标题。 /d Path 指定启动目录。

/i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。 /min 启动新的最小化“命令提示符”窗口。 /max 启动新的最大化“命令提示符”窗口。 /separate 在单独的内存空间启动 16 位程序。 /shared 在共享的内存空间启动 16 位程序。 /low 以空闲优先级启动应用程序。 /normal 以一般优先级启动应用程序。 /high 以高优先级启动应用程序。 /realtime 以实时优先级启动应用程序。

/abovenormal 以超出常规优先级的方式启动应用程序。 /belownormal 以低出常规优先级的方式启动应用程序。 /w 启动应用程序,并等待其结束。(英文:wait)

/b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用CTRL+C,否则将忽略 CTRL+C操作。使用 CTRL+BREAK 中断应用程序。其实,用start命令可以启动任意的Windows程序,比如你要启动 Notepad(记事本程序), 而又在附件中找不到的话,在开始的运行菜单中键入start notepad,Windows XP就会打开记 事本本文来自CSDN博客,转载请标明出处:

http://blog.csdn.net/binghgo/archive/2005/04/23/359897.aspx

没办法啊,我这些参数试了试不懂得,只好照搬过来了。555555555555555

下面是我收集的:

1. start不支持通配符

回来补充下:

1.start与call(擦,前面还没提到call,没什么关系,先看应该没问题)的区别:

call可调用内部标记,也可调用外部程序。但是这里的外部程序只限于bat,cmd...想很多快捷方式都打不开。但是start

就可以打开运行了。例如:start /w E:\\360\\360downloads\\Tencent\\QQ\\Bin\\QQ.exe 这样就打开我的QQ程序了。

注意:也许谨慎的朋友会用 start /w \对路径用引号是一个好习惯,但

是会发现这里运行不起来。因为 start 中用了引号会被误认为是参数\所以应该这样: start /w \

所以我们强调了使用start时使用:start \程序名/文件夹名/文件名\

可是你运行这两个看看什么结果: start /w c: start /w d:

你会发现这里的参数/w会失效,运行后会一下子出来两个文件夹,而不是一个完了再来另一个,难道start的/w参数对文件夹无效? 对于这个我不懂得。。。

还有就是:start. (start命令后跟一点):打开命令提示符所处的当前路径。

点?对了这就是cd命令是说过的东西。一个点可以当然两个点也行喽。都是旧的东西了,不说了。

自学批处理笔记(10)date time color mode 二十二. date 和 time 参数:/t 用来修改系统日期和时间。

DOS下输入 date会出现当前的日期,并要求输入新的日期,若不想更改日期直接回车。也可以直接在DOS下

输入date /t 这样就只显示当前日期了。time也是一个用法。

在批处理中如果要使用当前的日期或时间可以直接用úte%和%time%,这两个是系统的内部变量,直接可以

调用。若果只想要时间中的时分不要秒:%time:~0,6%这个是前面的内容,有点罗说了。 批处理之家教程地址:date:http://bbs.bathome.net/thread-13817-1-1.html time:http://bbs.bathome.net/thread-13818-1-1.html

二十三. color 作用:更改命令提示窗口的背景色和前景色

格式:color xy (x是背景色的代码,y是背景色的代码就是字体的颜色) 代码如下(可以再dos下键入color /?进行查看): 0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色

3 = 湖蓝色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时 的颜色。这个值来自当前控制台窗口、/T 开关或 DefaultColor 注册表值。

如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令 会将 ERRORLEVEL 设置为 1。

例如: \在亮白色上产生亮红色

二十四. title 作用:更改命令窗口的标题 格式:title 标题 这个很简单试试吧。

二十五. mode 配置系统设备

设备状态: MODE [device] [/STATUS] 打印重定向: MODE LPTn[:]=COMm[:] 选定代码页: MODE CON[:] CP SELECT=yyy 代码页状态: MODE CON[:] CP [/STATUS] 显示模式: MODE CON[:] [COLS=c] [LINES=n] 击键率: MODE CON[:] [RATE=r DELAY=d]

我很不懂,但是这个很常用:mode con cols=宽度 lines=长度的,和上面的

两个就可以制作一个友好的命令窗口了。 比如这个批处理文件: @echo off title 个人的天地 color 1f

mode con cols=50 lines=25 echo.

echo ----------------- 个 人 世 界 ------------------- echo/ echo/ echo/ echo/ echo 欢 echo 迎 echo 来 echo 到 echo 我 echo.

echo. 的

这是用来修改命令窗口的大小用

echo. 地盘 echo. echo. echo. echo. echo. echo. echo. echo. pause

这样就建立了一个不一样的窗口了。哈哈觉得好那个......

自学批处理笔记(11) vol label format defrag chkdsk convert 二十五. vol label discopy format defrag 这几个都是在dos下对盘得管理

(一)vol 作用:显示磁盘卷标和序列号(如果存在)。 格式:vol 盘符 例如:dos下输入: vol d:

显示了: 驱动器 D 中的卷是 磁盘下载包 卷的序列号是 CC9D-41F9

(二)label 作用:创建、更改或删除磁盘的卷标。 格式:LABEL [drive:][label]

LABEL [/MP] [volume] [label] drive: 指定驱动器名。 label 指定卷标签。

/MP 指定卷应该被当作安装点或卷名。

volume 指定驱动器(后面跟一个冒号)、装入点

或卷名。如果指定了卷名,/MP 标志则不必要。 例如:dos下输入:label d:下载盘

再打开我的电脑看看d盘,有什么变化没。

批处理之家的教程:http://bbs.bathome.net/thread-13909-1-1.html

(三)format 作用:格式化磁盘以供 Windows XP 使用。

格式:FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X] FORMAT volume [/V:label] [/Q] [/F:size]

FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors] FORMAT volume [/V:label] [/Q] FORMAT volume [/Q]

volume 指定驱动器(后面跟一个冒号)、装入点或卷名。 /FS:filesystem 指定文件系统类型(FAT、FAT32 或 NTFS)。 /V:label 指定卷标。 /Q 执行快速格式化。

/C 仅适于 NTFS: 默认情况下,将压缩在该新建卷上创建的文件。 /X 如果必要,先强制卸下卷。那时,该卷所有已打开的句柄不再有效。 /A:size 替代默认配置单位大小。极力建议您在一般状况下使用 默认设置。 NTFS 支持 512、1024、2048、4096、8192、16K、32K、64K。

FAT 支持 512、1024、2048、4096、8192、16K、32K、 64k,(128k、256k

用于大于 512 字节的扇区) 。

FAT32 支持 512、1024、2048、4096、8192、16k、32k、 64k,(128k 、

256k 用于大于 512 字节的扇区)。

注意 FAT 及 FAT32 文件系统对卷上的群集数量有以下限制: FAT: 群集数量 <= 65526

FAT32: 65526 < 群集数量 < 4177918

如果判定使用指定的群集大小无法满足以上需求,格式化将立即停止。 NTFS 压缩不支持大于 4096 的分配单元。 /F:size 指定要格式化的软盘大小(1.44) /T:tracks 为磁盘指定每面磁道数。 /N:sectors 指定每条磁道的扇区数。 以上都是帮助里的,因为这个很多参数我都没去试试。

(四) defrag 作用:磁盘碎片整理

格式:defrag [-a] [-f] [-v] [-?]

volume 驱动器号或装载点(d: 或 d:\\vol\\mountpoint) -a 只分析

-f 即使可用空间不足,也强制碎片整理 -v 详述结果 -? 显示这段帮助文字 这个比较简单了,没啥好说的。

(五)chkdsk 作用:检查磁盘并显示状态报告。

格式:CHKDSK 盘符\\路径\\文件名 [/F] [/V] [/R] [/X] [/I] [/C] [/L[:size]] 盘符 指定驱动器(后面跟一个冒号)、装入点或卷名。 文件名 可不写,仅用于 FAT/FAT32: 指定要检查是否有碎片的文件。 /F 修复磁盘上的错误。

/V 在 FAT/FAT32 上: 显示磁盘上每个文件的完整路径和名称。 在 NTFS 上: 如果有清除消息,将其显示。 /R 查找不正确的扇区并恢复可读信息(隐含 /F)。

/L:size 仅用于 NTFS: 将日志文件大小改成指定的 KB 数。 如果没有指定

大小,则显示当前的大小。

/X 如果必要,强制卷先卸下卷的所有打开的句柄就会无效(隐含 /F)。 /I 仅用于 NTFS: 对索引项进行强度较小的检查。 /C 仅用于 NTFS: 跳过文件夹结构的循环检查。

/I 和 /C 命令行开关跳过卷的某些检查,减少运行 Chkdsk 所需的时间。

(六) convert:http://bbs.bathome.net/thread-13910-1-1.html

自学批处理笔记(12)if

二十六. if 批处理中很常用的一个命令

格式:IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command

NOT 指定只有条件为 false 的情况下, Windows XP 才应该执行该命令。

ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件

为 true。

string1==string2 如果指定的文字字符串匹配,指定条件为 true。

EXIST filename 如果指定的文件名存在,指定条件为 true。

command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟一个执行 ELSE

关键字后的命令的 ELSE 命令。 一个一个进行讲解:

(一)if [not] string1==string2 命令1 else 命令2 如果sting1会等于string2则执行命令1否则执行命令2。

当然了这里的string1和string2也不一定都是相等的关系,有时也比较大小,可是我们不用><号而是用:

EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于

注意:if区分大小写,不区分字母大小写——使用参数“/i” if /i a == A echo “a”等于“A”

讲解:在IF命令后面使用参数“I”,表示不区分字母大小写。

区分大小写能够进行更精确的判断,不区分大小写则可以扩大判断的范围。 使用双引号:注意变量、标点符号等一些特殊字符的比较需要双引号,如: set var=我爱批处理

if /i \爱\第二个字是:爱。

一般字符串(数字除外)如果不能保证输入的字符是否有效值,最好使用双引号括起来。

来一个例子: @echo off

set /p var=请输入第一个比较字符: set /p var2=请输入第二个比较字符:

if %var% == %var2% (echo 我们相等) ELSE echo 我们不相等 pause

上面这个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了一个空格,

这个例子还是会认为相等,如何让有空格的输入不相等呢?我们在比较字符上加个双引号就可以了.又是命令有多行

这时我们就应该用()括起来。还有救是不要写成这样子: if %var1%==%var2% (echo 我们相等)else (echo 我们不相等)

要把(放在else那行这样系统才知道下面的是if的内容,否则系统会认为(echo我们不相等)是新命令。也就是

以后命令多了就:

if string1==string2 (命令1 命令2......)else ( 命令3

命令4....)

(二)IF [NOT] ERRORLEVEL number command

这个用法的基本做用是判断上一条命令执行结果的代码,以决定下一个步骤.一般上一条命令的执行结果代码只有

两结果,\成功\用0表示 \失败\用1(有时不是1)表示。还有就是%errorlevel%也是系统内的变量。

在举几个例子给新手理解 @echo off net usertest

IF %ERRORLEVEL% == 1 echo net user 执行失败了! pause

这个是判断上一条命令是否执行失败的 @echo off

set /p var=随便输入个命令: %var%

if %ERRORLEVEL% == 0 goto yes goto no :yes

echo !var! 执行成功了 pause exit :no

echo 基本上执行失败了.. pause

这个是根据你输入的命令,自动判断是成功还是失败了! 在来一个简化版的 @echo off

set /p var=随便输入个命令: %var%

if %ERRORLEVEL% == 0 (echo %var%执行成功了) ELSE echo %var%执行失败了! pause

else后面写上执行失败后的操作!

当然我门还可以把if else这样的语句分成几行写出来,使他看上去好看点... @echo off

set /p var=随便输入个命令: %var%

if %ERRORLEVEL% == 0 ( echo !var! 执行成功了 ) ELSE (

echo 基本上执行失败了.. )

pause

(三)IF [NOT] EXIST filename command

如果存在(不存在)文件名 就执行后面的命令,这就不多说了。 三个命令else都是可用课不用的。

好做一道之前还不过完善的练习:给定一窜字符,求长度。(来自网络) 这是代码: @echo off

set /p str=请输入任意长度的字符串: echo 你输入了字符串:\if not defined str (pause & goto :eof) set num=0 :len

set /a num+=1 set str=%str:~0,-1% if defined str goto len

echo 字符串长度为:%num% pause

(四)if defined 命令

判断一个变量是否为已经赋值。也就是判断变量是否为空。 1、defined

set /p var=请按任意键或回车:

if defined var echo ^%var^% 已经被赋值:%var% 讲解:假如变量%var%赋值,则显示后面内容。 注意:此处的变量名不必使用百分号“%”括住。 支持if的其它参数开关:

if not defined var (echo ^%var^% 没有被赋值:%var%) else (echo 已赋值) 当变量名为其它特殊符号时,需要双引号???(待) 2、两种检测空值方法比较

前面我们了解到一种判断变量是否为空的方法:if \为空!此处的 if defined 也有着同样的作用,并且比前者更有效。比较: if \——假如变量是空格……

if not defined var ——假如变量没有任何内容,也没有空格……

注意:空格也是一种特殊的值,准确地说,上者判断的是变量等于空格时的情况,而下者则判断所有情形,包括空格。因此,defined比前者更加彻底,包含了前者。 使用比较: @echo off

set /p a=输入字母Q:

if /i \你输入了字母Q。 set /p b=输入空格:

if \你输入了空格。(待)rem这里如果输入多个空格if 也认为是假的

set /p c=直接回车:

if not defined c echo 你直接回车了。

rem 这个等价于 if \你直接回车了。 pause

批处理中的if defined 需知:

源地址:http://www.bathome.net/thread-2050-1-10.html很详细 用 if defined 判断某个变量是否被定义过时需注意以下2点:

1、不能直接输入空格,有空格时需用变量来代替,且必须是用双!!来引用这个值含空格的变量 也就是必须开启延迟变量,或者将需判断的变量名赋值给 for 的 %%i 变量。 例如你运行下面代码会发现什么: @echo off set /a a+=1 if %a%==1 ( set b=1 echo %b% ) pause

解决方法一,使用开启变量延时用!b!来代替%b% 解决方法二,用call echo %%b%%代替echo %b% 解决方法三,用goto语句,在echo %b% 前面加上 goto a :a

2、若判断的变量名需要使用变量的字符截取功能时,则与上面的正好相反。 即:不能使用!!来引用变量,即使是在for中也是一样。

本文来源:https://www.bwwdw.com/article/hwd3.html

Top