(小标题:DOS快餐店(三))
今天 你COPY了吗?
★★★
√编写批处理备份文档
√copy和md命令的用法

餐前小点:在图片中隐藏情书
小菜红着脸跑来说:“维克托兄,我想给MM发送情书,又怕被别的MM偷看到,你教我个法子,情书如何不让别的MM看到?”维克托想了想说:“本店正好备有DOS餐前小点,你不妨先尝一尝吧……”
烹饪方法:随便找一个图片文件,本文采用C:\\Pictures\\s.jpg,情书 假设为D:\\Documents\\b.txt(格式不限),在命令行方式窗口输入命令:
copy /b C:\\Pictures\\s.jpg+D:\\Documents\\b.txt C:\\Pictures\\h.jpg
这样就得到了隐藏着情书的合并文件c:\\picture\\h.jpg。h.jpg文件大小正好等于s.jpg和b.txt的总大小。打开h.jpg,根本无法看出和s.jpg有什么不同。可以使用UltraEdit32等十六进制编辑器打开合并后的文件,就能查看隐藏在图片文件尾部的情书了。
小提示
文件合并时使用参数/b,要隐藏的文件必须放在“+”右侧。

本期配料:copy/md 适宜人群:没有DOS基础的初学者
学习目标:学会使用copy命令复制文件/使用md命令创建目录
1.copy命令
copy命令就像一台复印机,将一个或多个文件按原样复制并保存到指定位置(目录)。另外,你还可以直接将输入设备(如:键盘)的输入复制到指定的文件。

目标1:将c:\\test.txt文件复制到d:\\目录下
copy c:\\test.txt d:\\
命令格式:copy 要复制的源文件(包括路径和文件名) 文件复制的目标路径[\\文件名]
命令讲解:现在先从copy命令最简单的用法开始,将单个文件从一个目录按原样(包括文件名)复制到另一个目录,如果此操作成功,命令行窗口中会提示“已复制 1个文件”。在很多情况下,我们要为复制的文件副本赋予一个新的文件名,比如将c:\\test.txt文件复制到d:\\目录下并重命名为test2.txt:
copy c:\\test.txt d:\\test2.txt
问题随之出现了,如果要同时复制一个目录中的指定的一组或所有文件,总不能复制一个文件就执行一次copy命令吧?我们的第2个目标就是批量复制目录中的文件。

目标2:将c:\\movies目录中所有文件复制到d:\\backup目录中
copy c:\\movies d:\\backup
命令格式:copy 要复制的源目录[\\*.指定文件扩展名] 要复制到的目标目录 [/y]
命令讲解:要复制整个目录的文件,则copy命令只要使用不包含文件名的源目录和目标目录。有时只想复制一个目录中指定文件扩展名的一组文件,比如将c:\\movies目录中的RM文件复制到d:\\backup目录中:
copy c:\\movies\\*.rm d:\\backup
在源目录后加上“*.rm”,就是指复制这个目录下的所有扩展名为RM的文件。当目标目录中已经存在了和源目录中即将复制的文件相同文件名的文件时,就会出现如“改写x:\\xx吗?(Yes/No/All):”这样的提示,让你选择是覆盖、不覆盖还是全部覆盖时,又如何能不出现提示而直接全部覆盖呢?那就要用到可选参数/y(复制单个文件或批量复制时皆可使用),比如在目标2的基础上实现重名文件无须确认直接覆盖:
copy c:\\movies\\*.rm d:\\backup /y
大家有没有听说过“文件合并器”?刚才的“小菜一碟”就初步介绍利用copy命令的合并功能,在目标3中我们将为你详细讲解。
小提示
“*”称为“通配符”,如*.rm就代表所有扩展名为RM的文件,而a.*则代表所有文件主名为a而扩展名不限的文件,*.*就代表所有文件。“?”也是通配符的一种,但它只能代表一个字符,比如?.rm只能代表文件主名仅有一个字符的扩展名为RM的文件(如a.rm、b.rm等),可以通过将“?”夹带在字符中间起到模糊逻辑的作用,比如a1.rm和a2.rm可以用a*.rm来代表。

目标3:将文本文件1.txt和2.txt合并为3.txt
copy /b c:\\1.txt+c:\\2.txt c:\\3.txt
命令格式:copy /b 文件1+文件2+……文件N 合并后的文件名
命令讲解:使用“+”号将多个相同或不同格式的文件合并为一个文件,在第二个参数中指定合并后的文件名。利用copy命令的这个功能,你可以在文件中隐藏你的隐私内容。

小提示
★在尾部隐藏了文本数据的图片文件,在使用其他软件进行编辑并保存后,隐藏的文本数据有可能会丢失。
★MP3文件在使用此方法连接后,就能实现连续播放。
★合并图片/歌曲这样的二进制文件必须使用/b参数(b代表Binary,二进制),否则合并将会失败;另一个合并参数是/a(a代表ASCII,文本文件),只能用于纯文本的合并。两参数不能同时使用,二进制方式可以合并文本和二进制文件,而文本方式则只能合并文本。
★当进行软盘复制时,可在命令中加入“/v”参数,例如:copy /v /b 1.txt+2.txt 3.txt,这样可以减少因操作介质(如:软盘)的问题而导致的数据写入失败。

2.md命令
我们的硬盘就像一个大仓库,各种文件分门别类地存放在其中,其中有用的(比如应用程序文件),也有看的(比如电影文件),要把他们分类存放,我们就必须创建相应的小仓库(子目录)。md命令就像一支工程队,只要给他施工图(命令参数),他就能为你建造用以存储各种物品(文件)的仓库(目录)。

目标1:在c:\\下创建test目录
md c:\\test
命令格式:md 要创建的目录
命令讲解:如果省略全路径而直接给出目录名,则在当前目录下创建新目录。当我们需要新建多级目录时,比如在c:\\下新建test\\cfan目录,结合本刊今年第4期中《DOS快餐店(一)》中介绍的CD命令,我们通常会这样做(假设当前目录为c:\\):
md test
cd test
md cfan
这样的命令在目录层次较多的时候显得极为繁琐。其实,在Windows XP/2003中,md命令支持一次创建多级目录。

目标2:只用一条命令完成在c:\\下创建test\\cfan目录
md c:\\test\\cfan
命令格式:md [路径\\]目录1\\目录2\\目录3\\…
命令讲解:只需将要创建的目录以级联的方式作为md命令的参数,md就能直接创建多级目录。创建多级目录相对还算简单,可要是我们同时需要创建多个目录呢?在Windows XP/2003中,md命令支持一次创建多个目录。

目标3:在当前工作目录下同时创建a、b、c子目录:
md a b c
命令格式:md [路径\\]目录1 [路径\\]目录2 [路径\\]目录3……
命令讲解:md命令后要创建的目录个数是不定的,每增加一个目录名都会多创建一个对应的目录。如果在当前工作目录创建子目录,则可省略路径而只给出需创建的目录名。如果在其他目录创建子目录(可以在多个不同的目录下创建),则需给出全路径,如:md c:\\a d:\\b e:\\c。
小提示
★同时创建多级目录和多个目录只适用于Windows XP/2003。
★可以将用法2和用法3混合使用,如:md c:\\a\\b\\c d:\\a\\b\\c。

小菜一碟:备份用户指定的任意格式的文档
适宜人群:有一定DOS基础的用户
菜谱说明:很多办公一族为了满足办公室与家中电脑的数据共享,都会采用些移动存储设备(如:移动硬盘、优盘等)。移动存储设备的可靠性一直不尽如人意,所以经常备份其中的数据是十分必要的。我们在备份时是选择繁琐的手工方式,还是会选择方便的一键备份?学习了上面的配料用法,就让我们动手试做一道小菜吧。
脚本任务:备份C:\\myfolder目录下扩展名为DOC的Word文档到D:\\myfolder\\word目录
特别说明:“c:\\myfolder”及“d:myfolder\\word”分别为备份源目录和目标目录,可根据自己的实际备份需要进行修改。
第一步:打开“记事本”,将下列内容保存为Backup.bat并放置在任意目录:
@echo off
if not exist d:\\myfolder\\nul md d:\\myfolder
if not exist d:\\myfolder\\word\\nul md d:\\myfolder\\word
cd c:\\myfolder
cd d:\\myfolder\\word
copy /v /y c:*.doc d:
脚本讲解:关闭命令回显,检测是否存在目标目录,如果不存在则创建(由于Windows 98中的if语句无法检测目录是否存在,但支持空设备的检测,所以在“d:\\myfolder”后加上“nul”空设备名,以保证脚本在Windows 98下也能正常运行),改变源驱动器的当前目录为源目录c:\\myfolder,改变目标驱动器的当前目录为目标目录d:\\myfolder\\word,复制源目录中文件扩展名为DOC的文档到目标目录。

火速链接:关于回显命令echo和改变当前目录命令cd可参考本刊今年第4期的《DOS快餐店(一)》。

第二步:在桌面上创建这个批处理文件的快捷方式,并为其设置一个快捷键,即可实现一键备份。

美味大菜:支持参数的备份各种格式文档
适宜人群:有更好DOS基础的用户
菜谱说明:上面这道小菜让我们能很方便地备份文件扩展名为doc的Word文档,可是每次要备份其他文件扩展名的文档前都必须替换脚本文件中的文件扩展名和目标目录,下面我们要做一道支持参数备份的美味大菜。
脚本任务:备份任意目录下任意扩展名的文档到指定的目录
特别说明:该脚本的使用方法为“Backup 要备份的扩展名 备份目标目录”(例如:makelist txt d:\\myfolder\\text)。
第一步:打开“记事本”,输入下列内容并保存为Backup.bat:
@echo off
if {%2} == {} (set mypath2=) else set mypath2=%2
set mypath1=c:\\myfolder
copy /v /y %mypath1%\\*.%1 %mypath2%
if errorlevel 1 echo 命令格式:backup 文件扩展名 [目标目录]
if errorlevel 1 pause
脚本说明:这段代码中的逻辑部分请参考上期的《DOS快餐店(二)》。
第二步:打开“命令行提示符”窗口,用CD命令将当前驱动器和目录改变到Backup.bat批处理脚本文件所在目录。
第三步:假设现在要备份目录C:\\myfolder中Word文档(即*.DOC)到D:\\myfolder\\word目录,则输入“backup doc d:\\myfolder\\word”命令即可(不含引号)。如果当前工作驱动器和目录已是D:\\myfolder\\word,只要输入“backup txt”命令,具有相同效果。

餐后小点:让copy一次备份多个文件扩展名的文档
适宜人群:已掌握各条DOS命令的用户
菜谱说明:一次备份一种类型的文件有些不便,如何同时进行多类型文件的备份呢?
脚本任务:将TXT、DOC、XLS、JPG、GIF、MP3扩展名的文件分别备份至目标目录中以相应扩展名命名的目录中 (也可添加其他扩展名)。
将下列代码保存为Backup.bat并放置在任意目录,双击Backup.bat文件就可以执行批处理命令备份文档了。
@echo off
cd c:\\myfolder
cd d:\\myfolder
for %%d in (txt doc xls jpg gif mp3) do if not exist d:%%d\\nul md d:%%d
for %%f in (txt doc xls jpg gif mp3) do copy /v /y c:*.%%f d:%%f
脚本讲解:首先使用for循环语句检测d:当前目录(即刚才用“cd d:\\myfolder”设置的d:的当前目录)下是否存在指定扩展名作为目录名的子目录,如果不存在则创建之。然后再次使用for循环让“copy /v /y c:*.%%f d:%%f”根据前面括号中的内容(txt doc……)分别执行一遍,每次执行时语句中的“%%f”都将替换为括号中的扩展名(第一次执行时%%f为“txt”,第二次执行时则为“doc”,直到全部执行完)。按文件扩展名作为子目录名分别备份文档(for命令的使用,我们将在今后的DOS快餐店中为大家详细讲解,敬请关注)。

小提示
★在上文代码的for循环语句的括号内的扩展名可根据实际备份需要自由修改,源目录和目标目录相同。
★要了解copy命令的更多参数,可以在命令行窗口中输入“copy /?” 即可(不含引号,替换其中的“copy”可以获得其他命令的用法)。

DIY你的DOS菜
请按下列要求自己动手写出所需的命令,答案将在下期公布:
1.在D:\\下新建名为“cfan”的目录,然后在其下新建名为“info”的子目录。
2.试试如何将第1题的两条命令合并为一条。
3.将D:\\cfan下所有扩展名为TXT文件复制到D:\\cs下。

转自cfan,感谢PK分享经验

评论被关闭。