C#学习基本概念---xcopy(复制⽂件和⽬录树)
XCOPY是COPY的扩展,可以把指定的⽬录连⽂件和⽬录结构⼀并,但不能拷贝系统⽂件;使⽤时源盘符、源⽬标路径名、源⽂件名⾄少指定⼀个;选⽤/S时对源⽬录下及其⼦⽬录下的所有⽂件进⾏COPY。除⾮指定/E参数,否则/S不会拷贝空⽬录,若不指定/S参数,则XCOPY只拷贝源⽬录本⾝的⽂件,⽽不涉及其下的⼦⽬录;选⽤/V参数时,对拷贝的都进⾏较验,但速度会降低。
中⽂名
复制⽂件和⽬录树
外⽂名
xcopy
DOS命令
COPY的扩展,复制⽂件和⽬录树
作    ⽤
复制⽂件、⽬录树及⽬录下⽂件
C:\Documents and Settings\Administrator>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)。
  现存⽬标⽂件。
  【就是直接覆盖——Three~注】
/-Y
导致提⽰以确认改写⼀个
  现存⽬标⽂件。
/Z⽤重新启动模式复制⽹络⽂件。
命令⾏开关 /Y 可以预先在 COPYCMD 环境变量中设置。
  这可能被命令⾏上的 /-Y 改写。
C:\Documents and Settings\Administrator>
/B 复制符号链接本⾝与链接⽬标相对。
/J 复制时不使⽤缓冲的 I/O。推荐复制⼤⽂件时使⽤。
语法
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 返回的退出码,请在的 if 命令⾏上使⽤ errorlevel 参数。有关使⽤“if”处理退出码的批处理程序的范例,请参阅“”。下表列出每⼀个退出码和说明。
退出码 说明
0 ⽂件复制没有错误。
1 没有到要复制的⽂件。
2 ⽤户按 CTRL+C 终⽌了 xcopy。
4 出现了。没有⾜够的内存或磁盘空间,或命令⾏上输⼊了⽆效的驱动器名称或语法。
5 出现了磁盘写⼊错误。
范例
要从A 将所有⽂件和⼦⽬录(包括所有空的⼦⽬录)复制到驱动器 B,请键⼊:
xcopy a:b: /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