首页> 常识>

copy什么意思(批处理命令--文件篇之copy)

时间:2024-09-25 09:11:53

在Windows下我们使用复制、粘贴来拷贝一些文件或文件夹。在MS-DOS或批处理中,copy是复制、拷贝的意思,是一个内部命令,不需要任何程序来运行。

copy的作用是备份文件,合并文件,更新文件,或者将文件从一个位置复制到另一个位置

用法相对简单,copy命令针对的是文件,不是文件夹,支持通配符和UNC。

首先还是看下语法:


1.复制

单文件复制

1>.首先copy需要有目标位置或文件,否则不能进行下去。也就是copy文件不能copy到自身。

这里说的目标位置一定是一个不同于源位置的位置。

例1就是源位置和目标位置一样,就不能copy。

例2是copy当前文件夹下665文件夹里的所有文件到当前目录(也就是temp目录下)。

例3是123.txt从C盘根目录copy到d盘根目录了。

例1:

C:\>copy install*.log

installAgent.log

The file cannot be copied onto itself.

0 file(s) copied.

例2:

C:\Temp>copy 665 或 C:\Temp>copy .\665

665\rty.txt

1 file(s) copied.

C:\Temp>copy .\665

例3:

C:\copy c:\123.txt d:\

C:\123.txt

1 file(s) copied.

2>.如果路径含有空格或特殊字符,需要加引号。

例:

copy "C:\my work\new file.doc" "D:\New docs"

3>.如果要copy到的位置,目标目录不存在。文件将被copy到该位置,同指定目录同名的文件中。

例:temp目录下将出现一个998的文件,内容同于rty.txt。

C:\Temp>copy rty.txt c:\temp\998

1 file(s) copied.

多文件复制

多文件复制一般是针对本地或UNC局域网络目录下的所有文件,或使用通配符*,?等指定一些具有某些特征的文件进行复制。

1>.复制一个目录下的文件到另一个目录下

例1,

copy c:\123 d:\abc

将c:\123 目录中所有文件复制到d:\abc目录中.

例2,

copy c:\123\*.txt d:\abc /y

将c:\123目录中所有txt格式的文件复制到d:\abc目录中,当目标目录中已经存在了和源目录中要复制的同名文件时,就会出现如“覆盖x:\xx吗?(Yes/No/All):”这样的提示,让你选择是覆盖、不覆盖还是全部覆盖,

通过参数/y(复制单个文件或批量复制时皆可使用),可以实现重名文件无须确认直接覆盖。

例3,

UNC结合通配符copy的例子

copy \\network\sharefolder\*.xlsx C:\ttc\Bcopy

2.重命名

上面单文件复制的例3实际是一个文件重命名的例子。前面我们讲move的命令时,也有重命名的功能,另外ren(rename)也具有重命名的作用。那么它们有什么区别呢?

1>.copy是复制文件的命令,它的重命名只能针对文件,而且不会删除原文件。

例:

copy c:\a.txt c:\b.txt 会在c盘根目录下创建一个名为b.txt的新文件,内容和a.txt一样,但是a.txt仍然存在。

2>.move是移动文件或文件夹的命令,它的重命名可以是文件或文件夹,不管是覆盖还是移动,本质上会删除原文件或文件夹(尽管重命名本身,感觉上只是改了个名字)

例:

move a.txt b.docx 会将a.txt重命名为b.docx,并且删除a.txt。

move c:\123 c:\77,则是把123移动到C盘根目录,同时重命名为77(前提:C盘根目录下之前没有77这个目录)

move c:\123 c:\77.txt,你以为是什么呢,只是把123这个文件夹改了个名字为77.txt(前提:C盘根目录下之前没有77.txt这个文件或目录)。

思考:如果有77这个目录,或77.txt这个目录或文件,结果将会怎样呢?

3>.ren是重命名文件或文件夹的命令,它可以将一个或多个文件或文件夹的名称修改为新的名称,但是不会改变它们的位置(本质上会删除原文件或文件夹)。

例:

ren a.txt b.txt 也会将a.txt重命名为b.txt,并且删除a.txt。

ren c:\abc\ xyz 会将c盘下的abc文件夹重命名为xyz,并且删除原文件夹。

4>.copy可以使用通配符*和?(源和目标均可以使用)来批量复制或重命名文件,ren支持文件名更改前后使用通配符,move只支持源使用通配符,不支持目标使用通配符。

copy不能复制隐藏属性或系统属性的文件,需要先去掉这些属性,而move可以直接移动这些文件。

ren不能重命名隐藏属性或系统属性的文件,需要先去掉这些属性。

move文件夹对目标文件夹有保护性动作,遇到同名目录移动会拒绝访问,对同名文件则会提示是否覆盖。

ren遇到同名文件,会提示已有同名文件,不能执行重命名;为避免冲突,Windows下会建议你命名为另一个不同的名字(鼠标操作)。

copy遇到同名文件,会提示是否覆盖,加参数/y,可以不用提示直接覆盖。

copy支持通配符,你可以使用*和?来匹配多个文件(*匹配多个字符,?匹配单个字符)。

例如,如果你要复制当前目录下的所有txt文件,你可以使用这样的命令:

copy *.txt d:\

这样就会把所有以.txt结尾的文件复制到d盘根目录下。如果你要复制当前目录下的所有以a开头的文件,你可以使用这样的命令:

copy a* d:\

这样就会把所有以a开头的文件复制到d盘根目录下。如果你要复制当前目录下的所有长度为3个字符的文件,你可以使用这样的命令:

copy ??? d:\

这样就会把所有长度为3个字符的文件复制到d盘根目录下。

实践下面的例子,体验通配符*和?的区别:

C:\Temp>copy *ty.txt *Uy.txt

rty.txt

1 file(s) copied.

C:\Temp>copy *ty.txt ?Uy.txt

rty.txt

1 file(s) copied.

3.追加或合并

你可以使用批处理copy来合并多个文件为一个文件,具体的格式为:copy 文件1+文件2+文件3+…… 目的路径\新文件名。

例如,如果你要把d:\test.txt和d:\abc.txt两个文件的内容合并为d:\test\test.txt,你可以使用这样的命令12:

copy d:\test.txt+d:\abc.txt d:\test\test.txt

你也可以使用通配符来合并同一目录下的所有文件,例如:

copy *.txt merge.txt

这样就会把当前目录下的所有txt文件合并为merge.txt3。

copy /b d:\1.mp3+d:\2.mp3 e:\3.mp3

这样就会把1.mp3和2.mp3合并成3.mp3。

copy /b d:\1.txt d:\2.mp3

这样就会把1.txt和2.mp3合并,这里没有指定合成后的文件名,默认情况下,合并后的文件名是命令中的第一个文件的名。

在这里,即把2.mp3合并进了1.txt。

注意:合并图片/歌曲这样的二进制文件必须使用/b参数(b代表Binary,二进制),否则合并将会失败;另一个合并参数是/a

(a代表ASCII,文本文件),只能用于纯文本的合并。两参数不能同时使用,二进制方式可以合并文本和二进制文件,而文本方式则只能合并文本。

要在不修改文件的情况下为文件分配当前时间和日期,请使用以下语法:

copy /b <source> +,,

如copy /b 33.txt +,,

其中的逗号表示有意省略了目标参数。

4.一些特殊应用

1>.创建一个空文件(0字节文件)

copy nul emptyfile.txt

2>.静默拷贝(屏幕上没有反馈)

copy source_file.doc newfile.doc >nul

3>.从控制台复制(接收用户输入)

COPY CON filename.txt

执行该命令后从键盘输入字符,按Ctrl+Z结束,然后回车就copy了一个自己输入内容创建的文本文件。

copy和xcopy的区别:

1>.copy是DOS内部命令,xcopy是DOS外部命令,xcopy stands for extended copy,即copy在任何存在DOS的环境下都可以使用,而xcopy则需要system32文件夹或批处理当前目录存在xcopy.exe文件才可运行。

2>.copy只针对文件,不针对文件夹,而xcopy则可以复制文件和目录树,包括空目录和子目录。

3>.copy命令能合并两个文件,而xcopy不能。

4>.copy不能复制隐藏属性或系统属性的文件,而xcopy有更丰富的参数,可以根据文件的属性,日期,大小等条件来选择性地复制文件,也可以复制隐藏文件和系统文件,覆盖只读文件,复制加密文件等。