中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » 用外部命令XCOPY复制文件和目录树
作者:
标题: 用外部命令XCOPY复制文件和目录树 上一主题 | 下一主题
gendan
新手上路





积分 4
发帖 1
注册 2008-7-26
状态 离线
『楼 主』:  用外部命令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           复制目录和子目录,包括空的。
               与 /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 改写。


xcopy d:\123 e:\456 /e /t /d

2008-7-26 09:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xijun19860420
新手上路





积分 8
发帖 4
注册 2008-8-6
状态 离线
『第 2 楼』:  

不错,学习了。谢谢!

2008-8-6 15:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ykenny
新手上路





积分 10
发帖 5
注册 2008-8-10
状态 离线
『第 3 楼』:  

好东西啊

2008-8-10 20:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gpfengineer
初级用户





积分 150
发帖 58
注册 2008-3-27
状态 离线
『第 4 楼』:  

xcopy
复制文件和目录树。
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/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 复制目录和子目录,包括空的。
与 /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 改写。



语法
[编辑本段]

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[+file2][+file3]...]


参数
[编辑本段]

Source
必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。
Destination
指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。
/w 在开始复制文件之前将显示以下消息并等待您的响应:
Press any key to begin copying file(s)
/p 提示您确认是否要创建每个目标文件。
/c 忽略错误。
/v 在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同。
/q 禁止显示 xcopy 消息。
/f 复制时显示源文件名和目标文件名。
/l 显示要复制的文件列表。
/g 创建解密的目标文件。
/d [:mm-dd-yyyy]
只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括 mm-dd-yyyy 值,xcopy 会复制比现有 Destination 文件新的所有 Source 文件。该命令行选项使您可以更新更改过的文件。
/u 只从 source 复制 destination 中已有的文件。
/i 如果 Source 是一个目录或包含通配符,而 Destination 不存在,xcopy 会假定destination 指定目录名并创建一个新目录。然后,xcopy 会将所有指定文件复制到新目录中。默认情况下,xcopy 将提示您指定 destination 是文件还是目录。
/s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。
/e 复制所有子目录,包括空目录。同时使用 /e、/s 和 /t 命令行选项。
/k 复制文件,如果源文件具有只读属性,则在目标文件中保留该属性。默认情况下,xcopy 会删除只读属性。
/r 复制只读文件。
/h 复制具有隐藏和系统文件属性的文件。默认情况下,xcopy 不复制隐藏或系统文件。
/a 只复制那些具有存档文件属性设置的源文件。/a 不修改源文件的存档文件属性。
/m 复制具有存档文件属性设置的源文件。与 /a 不同,/m 关闭在源中指定的文件的存档文件属性。
/n 使用 NTFS 短文件或目录名创建副本。将文件或目录从 NTFS 卷复制到 FAT 卷或者当目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要 /n。目标文件系统可以是 FAT 或 NTFS。
/o 复制文件所有权与自由选择的访问控制列表 (DACL) 信息。
/x 复制文件审核设置和系统访问控制列表 (SACL) 信息(包含 /o)。
/exclude:filename1 [+[filename2]] [+[filename3]]
指定包含字符串的文件列表。
/y 禁止提示您确认要覆盖现存的目标文件。
/-y 提示您确认要覆盖现有目标文件。
/z 在可重启模式中通过网络复制。
/? 在命令提示符显示帮助。
/t 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 命令行选项。

注释
[编辑本段]

使用 /v
XOX
拷贝后校验,会影响速度
使用 /exclude
列出每个文件的单独行中的每个字符串。如果列出的任何字符串与要复制的文件的绝对路径的任何部分匹配,就从复制进程排除该文件。例如,如果指定字符串 "\Obj\",则会排除 Obj 目录下的所有文件。如果指定字符串 ".obj",则排除具有 .obj 扩展名的所有文件。
使用 /z
如果在复制过程中丢失连接(例如,如果用于连接的服务器脱机),复制过程将在重新建立连接后恢复。/z 也显示每个文件完成的复制操作的百分比。
在 COPYCMD 环境变量中使用 /y
可在 COPYCMD 环境变量中使用 /y。在命令行上使用 /-y 可以覆盖该命令。默认情况下,会提示您覆盖,除非您从批处理脚本内运行 copy。
复制加密的文件
将加密文件复制到不支持 EFS 的卷会导致错误。应首先解密文件或将文件复制到支持 EFS 的卷中。
附属文件
要附加文件,请指定单个目标文件,多个源文件(使用通配符或文件 1 + 文件 2 + 文件 3 格式)。
Destination 的默认值
如果省略 Destination,xcopy 命令将文件复制到当前目录。
指定 Destination 是文件还是目录
如果 Destination 不包含现有目录且不以反斜杠 (\) 结尾,会出现下列消息:
Does destination specify a file name
or directory name on the target
(F = file, D = directory)?
如果要将一个或多个文件复制到一个文件,请按 F。如果要将一个或多个文件复制到一个目录,请按 D。
使用 /i 命令行选项可抑制显示该消息,从而导致 xcopy 认定在源是多个文件或一个目录的情况下,目标是一个目录。
使用 xcopy 命令设置 Destination 文件的存档属性
xcopy 命令创建具有存档属性设置的文件,无论源文件中是否设定了此属性。有关文件属性和 attrib 的详细信息,请参阅“”。
比较 xcopy 和 diskcopy
如果磁盘的子目录中包含文件,要将其复制到具有不同格式的磁盘中,请使用 xcopy 命令,而不要使用 diskcopy。因为 diskcopy 命令是一个磁道接一个磁道地复制磁盘,所以需要源磁盘和目标磁盘的格式必须相同。xcopy 命令没有该要求。通常情况下请使用 xcopy,除非您需要完整的磁盘图像副本。
xcopy 的退出码
要处理 xcopy 返回的退出码,请在批处理程序的 if 命令行上使用 errorlevel 参数。有关使用“if”处理退出码的批处理程序的范例,请参阅“”。下表列出每一个退出码和说明。
退出码 说明
0 文件复制没有错误。
1 没有找到要复制的文件。
2 用户按 CTRL+C 终止了 xcopy。
4 出现了初始化错误。没有足够的内存或磁盘空间,或命令行上输入了无效的驱动器名称或语法。
5 出现了磁盘写入错误。

范例
[编辑本段]

要从驱动器 A 将所有文件和子目录(包括所有空的子目录)复制到驱动器 B,请键入:
xcopy a:b:/s /e
要包含上一示例中的任何系统或隐藏文件,请按如下所示添加 /h 命令行选项:
xcopy a:b:/s /e /h
要使用 \Rawdata 目录中 1993 年 12 月 29 日后更改的文件更新 \Reports 目录中的文件,请键入:
xcopy \rawdata \reports /d:12-29-1993
要更新上例中 \Reports 中存在的所有文件,而不考虑日期,请键入:
xcopy \rawdata \reports /u
如果只想获得前一个命令要复制的文件列表,而不复制文件,请键入:
xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out
文件 Xcopy.out 列出了要复制的所有文件。
要将 \Customer 目录和所有子目录复制到网络驱动器 H: 上的目录 \\Public\Address,保留只读属性,并在 H: 上创建新文件时对您做出提示,请键入:
xcopy \customer h:\public\address /s /e /k /p
要发出上一个命令,确保在 \Address 目录不存在时 xcopy 会创建该目录,同时应抑制显示创建新目录时要显示的消息,请按如下所示添加 /i 命令行选项:
xcopy \customer h:\public\address /s /e /k /p /i
可以创建批处理程序执行 xcopy 操作,并且使用 if 批处理命令在发生错误时处理退出码。例如,以下的批处理程序使用可替换的 xcopy 源和目标参数:
@echo off
rem COPYIT.BAT transfers all files in all subdirectories of
rem the source drive or directory (%1) to the destination
rem drive or directory (%2)
xcopy %1 %2 /s /e
if errorlevel 4 goto lowmemory
if errorlevel 2 goto abort
if errorlevel 0 goto exit
:lowmemory
echo Insufficient memory to copy files or
echo invalid drive or command-line syntax.
goto exit
:abort
echo You pressed CTRL+C to end the copy operation.
goto exit
:exit
要使用该批处理程序将 C:\Prgmcode 目录和其子目录中的所有文件复制到驱动器 B 中,请键入:
copyit c:\prgmcode b:
该命令解释程序将用 C:\Prgmcode 替换 %1 与 B:。对于 %2,然后使用 xcopy 与 /e 和 /s 命令行选项。如果 xcopy 遇到错误,批处理程序将读取退出码并转到相应 IF ERRORLEVEL 语句中指示的标签,然后显示相应的消息并退出批处理程序。






适用场合
[编辑本段]
  在进行连同子目录一起拷贝时很有用,在拷贝大量文件时比COPY命令
        要快得多



精彩举例
[编辑本段]
1、如只是单纯地复制 E:\ 盘上所有文件到 D:\ 盘上,就输入“ xcopy e:\*.* d: /s /h "就行啦!如果在复制过程中,你不要他复制文件啦!那就按键盘热键“Ctrl " +"Pause /break" 二个热键 来中断复制。
2、如果想把E:\ 盘上所有文件复制到D:\盘上,分为今天复制一点,明天再接着复制一些,后天再接着复制一些。或者是某种原因上次没有复制完成,今天想接着复制。(这种情况是经常在复制文件中出现的)那可怎么办才好呢?
那就输入“ xcopy e:\*.* d: /s /h /d /y ”就行啦。他能查出那些文件是已经复制过去啦,那些文件还没有复制过去的。
3、当然我们也会碰到这种情况,一些文件我们已经修改过啦!网上面又有最新版本的啦。原来备份的那份文件我们要及时更新啦。那怎么才能同步更新呢?当然我们可以把最新的好份文件复制过去,这也是一种解决办法。
如果修改的文件有很多的,自己到时候也记不清楚那份文件是更新过的。这么多的原来备份的那份文件都要更新,都要复制过去,可不是件省力气的活,而且容易出错和一些文件被忘记啦!
那和上面一样也同样输入" xcopy e:\*.* d: /s /h /d /y "就行啦!
4、还有一种情况我们经常也碰到的,因为复制某个文件出错或者这个文件在使用中,而停止了复制工作,(比如,复制C 盘上的 windows xp )我们这时候想跳过某个出错的文件和某个正在使用中文件而继续复制其他文件。
在多加入一个参数" /c "就是 " xcopy e:\*.* d: /s /h /d /c /y "就行啦!
5、有时候我们想XCOPY 变为自动复制,并且复制完成后关闭电脑,可以建立一个批处理文件,新建文本文档,更名为XCOPY.BAT 当然扩展名原来是TXT 格式的要更名为BAT 在这个 XCOPY.BAT 中输入
xcopy e:\*.* d: /s /h /c /y
shutdown -s
然后双击xcopy.bat 运行它,你这时候可以出去玩啦。电脑会自己复制备份完成文件然后自动关闭电脑。

================================================================
-----------------------------------以下-由  icebat -冰蝠-提供---------------------------------
================================================================
下面就我遇到的一个例子说两个初学者容易遇到的问题。
1.我想用.bat 批处理 来运行复制 我的QQ 个人信息文件夹的内容到D 盘。只要双击一下就可以了。
于是我就开始写xcopy的命令,做了很久都没有成功,后来发现是,我的批处理文件名是xcopy.bat ,
所以特别提醒大家批处理的文件名不能是一个命令。。。
然后,我的代码
=========================================
xcopy C:\Program Files\Tencent\QQ\316355*** d:\316355*** /e /h /d /y /r /v /f /k
pause
=========================================
提示错误,
原因是 批处理里面的文件路径不能有“空格”,“Program Files”就有了一个空格,而且字符长度不支持大于8个字符的文件或者文件夹名。解决方法是用8.3短文件名代替。前面留下6个字符,然后加上~1 ,刚好八个字符,就可以了。如下
================================
xcopy C:\Progra~1\Tencent\QQ\316355~1d:\316355*** /e /h /d /y /r /v /f /k
pause
================================
2.这样就可以复制了。但是还有个问题,就是开始复制的时候,提示“请你选择316355***的文件类型,(F,文件/D,目录)需要选择D 才可以。
原来xcopy 有合并和生成文件的功能,系统不知道你是需要文件夹还是文件,在产生分歧的时候就询问。不过这样对我们很麻烦。
解决方法:只要在目标文件夹后面加上\就可以了,例如:
================================
xcopy C:\Progra~1\Tencent\QQ\316355~1d:\316355***\ /e /h /d /y /r /v /f /k
pause
================================注意的d:\316355***\   这里有个斜杠
============================================================
----------------------------^以上又-IceBat 冰蝠  添加 ^-----------------------

2008-8-17 10:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: