XCopy命令实现增量备份

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] [/B] [/J] [/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 取消提示以确认要覆盖 现有目标文件。 /-Y 要提示以确认要覆盖 现有目标文件。 /Z 在可重新启动模式下复制网络文件。 /B 复制符号链接本身与链接目标。 /J 复制时不使用缓冲的 I/O。推荐复制大文件时使用。 开关 /Y 可以预先在 COPYCMD 环境变量中设置。 这可能被命令行上的 /-Y 覆盖。

例子:

XCOPY E:\vstsworkspace\source\web\resource C:\home\site\web\ /s /e /h /r /k /y /d /exclude:exclude.txt>tempTips.txt 

上面命令实现:

1、把C:\home\site\web\ 下的文件增量复制到E:\vstsworkspace\source\web\resource

2、并且是剔除exclude.txt的。

3、把复制的文件名都写到tempTips.txt文件中

 

例如:

       要将d:\xly下所有文件备份到e:\xly1,可以使用如下命令:

  xcopy d:\xly\*.*/s/h e:\xly1

  又比如,要恢复e:\xly1下2006年6月1日以后的文件至D:\xly,就可使用如下命令:

  xcopy e:\xly1\*.*/s/h/d:2006-06-01 d:\xly

出处:https://www.cnblogs.com/pachongshangdexuebi/p/5051977.html

=======================================================================================

XCopy复制文件夹命令及参数详解

XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件;使用时源盘符、源目标路径名、源文件名至少指定一个;选用/S时对源目录下及其子目录下的所有文件进行COPY。除非指定/E参数,否则/S不会拷贝空目录,若不指定/S参数,则XCOPY只拷贝源目录本身的文件,而不涉及其下的子目录;选用/V参数时,对的拷贝的扇区都进行较验,但速度会降低。

我们不可数典忘祖,该学习的还是要学习,不该忘记的还是不能忘记,尤其是DOS批处理命令,在开发软件或项目的时候,都离不开这些基本的原始的命令。本文,我们来学习Xcopy的参数及实例

一、Xcopy参数介绍

  命令格式:XCOPY source [destination] 一堆可选的参数
  参数介绍
  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 禁止提示以确认改写一个现存目标文件。
  /-Y 导致提示以确认改写一个现存目标文件。
  /Z 用重新启动模式复制网络文件。

二、Xcopy命令实例介绍

①本机复制文件或文件夹的实例

复制代码 代码如下:
  Xcopy d:\UpdateFiles e:\123 /s /e /y
  命令解释:将D盘的UpdateFiles文件夹中包含的所有东西,全部复制到E盘的123文件夹内;/s /e /y 参数说明:在复制文件的同时也复制空目录或子目录,如果目标路径已经有相同文件了,使用覆盖方式而不进行提示。

②在局域网中的应用实例

复制代码 代码如下:
  Xcopy \\192.168.0.168\UpdateFiles e:\123 /s /e /y
  命令解释:将192.168.0.168这台计算机的名称为UpdateFiles的文件夹内的所有东西,全部复制到本机的e:\123 文件夹;参数说明:在复制文件的同时也复制空目录或子目录,如果目标路径已经有相同文件了,使用覆盖方式而不进行提示。

③结合/d标签,实现只复制比目标文件新的文件

假如现在c:\a文件夹下的所有文件和d:\a下的文件相同(修改日期及内容) c:\a下的一个文件被别人修改了或者添加了一个文件!
能否写个bat,判断一下c:\a文件夹下的每个文件的最后修改日期是不是在前两天内!如果是,则复制到d:\a下的相应目录(如果目标已存在,则覆盖;如果不存在,则复制),如果不是,则不复制了.

复制代码 代码如下:
@echo off
echo y|xcopy c:\a /d /e /r /k d:\a\
pause

经测试如果目标文件与源文件相同则不复制。确实一定程度了减少了对硬盘的读写。

 

三、示例

--注释:从c:\websites拷贝到c:\copy目录(注c:\copy\则不会提示是目录还是文件)排除c:\Exclude.txt中的
xcopy c:\websites c:\copy\ /s /e /y /EXCLUDE:c:\Exclude.txt
 
--注释:不包含以.obj 、 .sdf 、 .pdb 、 .rar 、.config 、结尾的文件,也不包含Common.js文件
--c:\Exclude.txt
.obj  
.sdf  
.pdb
.rar
.config
Common.js
@ECHO OFF 
echo '开始拷贝文件夹及文件?按任意键继续'
pause
xcopy c:\websites c:\copy\ /s /e /y /EXCLUDE:c:\Exclude.txt
pause

 

出处:https://blog.csdn.net/smartsmile2012/article/details/78123534

=======================================================================================

Xcopy 复制文件和目录,包括子目录

Xcopy
复制文件和目录,包括子目录。

语法
xcopy Source [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:mm-dd-yyyy]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:file1[+[file2]][+[file3]] [{/y|/-y}] [/z]
参数

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 命令行选项。
/t :只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 命令行选项。
/k :复制文件,如果源文件具有只读属性,则在目标文件中保留该属性。默认情况下,xcopy 会删除只读属性。
/r :复制只读文件。
/h :复制具有隐藏和系统文件属性的文件。默认情况下,xcopy 不复制隐藏或系统文件。
/a :只复制那些具有存档文件属性设置的源文件。/a 不修改源文件的存档文件属性。有关如何通过使用 attrib 来设置存档文件属性的信息,请参阅“”。
/m :复制具有存档文件属性设置的源文件。与 /a 不同,/m 关闭在源中指定的文件的存档文件属性。有关如何通过使用 attrib 来设置存档文件属性的信息,请参阅“”。
/n :使用 NTFS 短文件或目录名创建副本。将文件或目录从 NTFS 卷复制到 FAT 卷或者当目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要 /n。目标文件系统可以是 FAT 或 NTFS。
/o :复制文件所有权与自由选择的访问控制列表 (DACL) 信息。
/x :复制文件审核设置和系统访问控制列表 (SACL) 信息(包含 /o)。
/exclude:filename1[+[filename2]][+[filename3]] 指定包含字符串的文件列表。
/y :禁止提示您确认要覆盖现存的目标文件。
/-y :提示您确认要覆盖现有目标文件。
/z :在可重启模式中通过网络复制。
/? :在命令提示符显示帮助。


注释
使用 /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 语句中指示的标签,然后显示相应的消息并退出批处理程序。

xcopy 如何取消 消息 是目录 还是文件的解决方法
xcopy d:\testcopy\*.* e:\testCopy
目标 E:\testCopy 是文件名
还是目录名
(F = 文件,D = 目录)?
怎么取消掉这个 是文件还是目录的提示框?
/Y 是覆盖取消提示 ,防止之后提示
\ 是在新建的时候取消提示
帮助文档在 XCOPY /? 找到
正确的是:
XCOPY D:\dir F:\dir\ /Y
在新的目录加上 \ 然后带/Y 这样在第一次多次的时候就不会提示了
或者我们用管道符:
echo f | XCOPY D:\dir F:\dir /Y

echo d | XCOPY D:\dir F:\dir /Y
这样就不用带\了。

 

出处:https://www.jb51.net/article/11313.htm

=======================================================================================

DOS 的 XCOPY 命令的应用之排除某些文件或文件夹

xcopy .         P:\wamp64\www\iptvAIO            /Y /e   /EXCLUDE:EXCLUDE.txt

EXCLUDE.txt 文件内容:

要排除的文件或文件夹在另一个 TXT(如 EXCLUDE.txt)文件中!本例内容如下。

.hg\
css
.bat
.hgignore
exclude.txt
  • 排除了(不会拷贝)2 个文件夹:
  1. .hg
  2. css
  •  排除了(不会拷贝)2 种类型的文件:
  1. .bat
  2. .hgignore
  • 排除了(不会拷贝)1 个文件: exclude.txt

 

源文件结构:

.hgignorecopy-all-to-webserver.batdae.logdae.phpdbInfo.phpdbOp.phpexclude.txtheartHop5s.phphhh.sqlpdo.phpprglist.jsonstbOp.phptest.htmlver.php
│  
├─.hg
│  │  00changelog.i
│  │  cur-message.txt
│  │  dirstate
│  │  last-message.txt
│  │  requires
│  │  thgstatus
│  │  undo.backup.dirstate
│  │  undo.bookmarks
│  │  undo.branch
│  │  undo.desc
│  │  undo.dirstate
│  │  
│  ├─cachebranch2-served
│        
├─csshhh.css
│      
└─js-wf
        hhh.js
        wlib.js
        

 

/M 选项在备份时非常有用

以前拷贝过的文件在没有修改时不会拷贝,在文件大、文件多时会节省非常多的时间。

@REM XCOPY /A 仅复制有存档属性集的文件,但不更改属性。
@REM XCOPY /M 仅复制有存档属性集的文件,并关闭存档属性。

@rem xcopy .         P:\wamp64\www\iptvAIO           /M /Y    /EXCLUDE:EXCLUDE.txt
@rem xcopy .\js-wf   P:\wamp64\www\iptvAIO\js-wf\    /M /Y /e
@rem xcopy .\css     P:\wamp64\www\iptvAIO\css\      /M /Y /e

xcopy .         P:\wamp64\www\iptvAIO            /Y /e   /EXCLUDE:EXCLUDE.txt

本例运行环境

本例是在 WINDOWS 2016 的 CMD 中。 应该适用于所的 WINDOWS(95/98/XP/7/VISTA/8/10/2000/2003/2008/2012/2016) 及 DOS。

 

出处:https://my.oschina.net/SamXIAO/blog/2051103

=======================================================================================

使用示例:

示例1:实现文件和文件夹同步备份

cmd /c
@echo off
rem [@echo off为关闭复制信息,@echo on显示复制信息]
xcopy  /m /s /e /c /r /h /y /f  E:\Documents \\192.168.0.1\Share
rem pause
@echo off
rem [关闭注释信息]
rem [E:\Documents是源文件夹,\\192.168.0.1\Share目标文件夹。]
rem [/M  只复制有存档属性集的文件,并关闭存档属性。]                                    
rem [/S  复制目录和子目录,除了空的。]
rem [/E  复制目录和子目录,包括空的。]
rem [/C  即使有错误,也继续复制。
rem [/R  覆盖只读文件。]
rem [/H  也复制隐藏和系统文件。]
rem [/O  复制文件所有权和 ACL 信息。]
rem [/Y  禁止提示以确认改写一个现存目标文件。]   
rem [/F  复制时显示完整的源和目标文件名。]
rem [调试时,可把rem pause里的rem去掉,便于查看复制信息。]

 

我是用这个命令来设置的可是发现由于文件过多耗时有点多能不能自动跳过没修改过的文件只复制并覆盖修改过的文件?

可以加上/d参数即可。如果有大文件的,建议再加一个/j参数。

 

出处:https://blog.51cto.com/zhcxl/175635

 

---------------------------------------------------------------------------------------

示例2:我自己写了项目的备份脚本

排除不复制的配置文件c:\exclude.txt的内容如下:

::备份C#程序排除文件夹和文件
\.vs\
\packages\
\.git\
\.svn\
\obj\
\bin\

::备份JAVA程序排除文件夹和文件
\.idea\
.class

 

执行程序BackupProjects.bat内容如下:

版本一:增加双引号防止路径中有空格

echo off

set sour=D:\_john\LocalSvn\TestSVN\TestProject\
set dest=\\192.168.1.50\Share\Car-bak20190519\
set para= /e /s /y /h /r /exclude:c:\exclude.txt
set dir=Camera,PVG.Lib,TestCache,TestConfig,TestDesignPattern,TestEntityFramework,TestHook,TestLog4net,TestSqliteAndLog4net,TestThread,TestTypeAndReflection,TestVideo
set xcopyLog=c:\xcopy.log

echo xcopy log > %xcopyLog%

for %%i in (%dir%) do (
echo xcopy %sour%%%i to %dest%%%i
echo xcopy %sour%%%i to %dest%%%i >> %xcopyLog%
xcopy %sour%%%i %dest%%%i\ %para% >> %xcopyLog%
)

set sour=D:\_john\LocalSvn\TestSVN\trunk\
set dir=AutoUpdate,PVG_DownloadFiles,TestIBM.MQ,WarningAlert
for %%i in (%dir%) do (
echo xcopy %sour%%%i to %dest%%%i
echo xcopy %sour%%%i to %dest%%%i >> %xcopyLog%
xcopy %sour%%%i %dest%%%i\ %para% >> %xcopyLog%
)

rem 复制零散的单个目录或文件
echo 复制零散的单个目录或文件
echo 复制零散的单个目录或文件 >> %xcopyLog%
echo d | xcopy "E:\Bat脚本" "%dest%Bat脚本" %para% >> %xcopyLog%
echo f | xcopy "D:\_john\LocalSvn\DownloadProject\OAUS源码.rar" "%dest%OAUS源码.rar" %para% >> %xcopyLog%

echo 复制完成,请查看执行的日志文件:%xcopyLog%
pause
View Code

这里的代码很简单,你应该能看懂,我就不解释了

版本二:增加了耗时的显示等

echo on

set datestamp=%date:~6,4%-%date:~0,2%-%date:~3,2%
set datestamp=%date:-=%
set startime=%time: =0%
set timestamp=%startime:~0,2%%startime:~3,2%%startime:~6,2%

set sour=D:\_john\LocalSvn\TestSVN\
set dest=\\192.168.1.50\Share\Car-bak%datestamp%\

set para= /e /s /y /h /r /exclude:exclude.txt


set xcopyLog=d:\xcopy_%datestamp%.log
echo xcopy log > %xcopyLog%
goto :main


rem 复制零散的单个目录或文件
:main
echo 复制零散的单个目录或文件
echo 复制零散的单个目录或文件 >> %xcopyLog%

echo d | xcopy "E:\Bat脚本" "%dest%Bat脚本" %para% >> %xcopyLog%
echo d | xcopy "D:\DevTools" "%dest%DevTools"  %para% >> %xcopyLog%
echo d | xcopy "D:\_John个人文档" "%dest%_John个人文档"  %para% >> %xcopyLog%
::echo f | xcopy "D:\_john\LocalSvn\DownloadProject\OAUS源码.rar" "%dest%OAUS源码.rar" %para% >> %xcopyLog%


:done
echo 复制完成,请查看执行的日志文件:%xcopyLog%
call :_difftime %startime% %time% difftime
set /a difftime=%difftime%/100
echo 备份耗时为:%difftime% 秒 >> %xcopyLog%
echo 备份耗时为:%difftime% 秒
pause
goto :eof


rem  兼容时间点跨天的情行,时间格式00:00:00.00 或者 0:00:00.00 皆可
:_difftime <Begin_Time> <End_Time> [ret] //返回两个时间点的差值(单位0.01秒)
Setlocal enabledelayedexpansion&set b=0%1&set e=0%2&set c=1!e:~-11!-1!b:~-11!&set c=!c::=!
set/a c=%c:.=%-4000*(160*(1%e:~-11,-9%-1%b:~-11,-9%)+1%e:~-8,-6%-1%b:~-8,-6%)
endlocal & (if %3.==. (echo %c:-=8640000-%) else (set/a %3=%c:-=8640000-%))&exit/b
View Code

 

---------------------------------------------------------------------------------------

示例3:复制本地文件到远程服务器

把本地文件复制到远程服务器:用Xcopy命令可以做到,具体实现如下,感兴趣的朋友可以参考下哈,希望对你学习批处理有所帮助
A.net use \\IP地址 密码/user:******
B.xcopy 文件 \\IP地址\
批处理文件为backup.bat,其代码如下:

net use \\192.168.1.198\ipc$ Zqf198703 /user:royalpeak
xcopy g:\backup\*.* \\192.168.1.198\数据备份 /D /E /Y /H /K
net use \\192.168.1.198\ipc$ /delete

用Xcopy命令可以做到
xcopy 源路径 目标路径
复制文件和目录,包括子目录。

 

出处:https://www.jb51.net/article/36562.htm

---------------------------------------------------------------------------------------

示例4:常用举例

xcopy 是一个很有用的doc命令,应该学习学习,XCOPY 还有众多的功能, 是加参数来完成的。上面的/s /e 参数的作用分别是把子目录和空目录都复制过去。
xcopy 是一个很有用的doc命令,应该学习学习!
可以用xcopy实现,例如:
C:\>xcopy C:\ppt\*.* D:\ppt\ /s /e
这条命令的意思就是把C盘下的PPT文件夹全部拷贝到D盘
XCOPY 还有众多的功能, 是加参数来完成的。上面的/s /e 参数的作用分别是把子目录和空目录都复制过去,
一些使用举例和参数说明如下:
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 运行它,你这时候可以出去玩啦。电脑会自己复制备份完成文件然后自动关闭电脑。

 

出处:https://www.jb51.net/article/29055.htm

---------------------------------------------------------------------------------------

示例5:实现只复制比目标文件更新的文件

有时候我们需要时候备份一些文件,只有当这个文件被修改了并且不是空的时候才复制

因为网站需要频繁的更新首页,有时候使用cdn经常导致首页正在生成内容的时候同步数据(可能是冲突,经常导致首页是空的),这就想了先生成一个不是首页的index2.htm然后再复制一遍为index.htm,这样index2的频繁读写也没问题了。所以先判断index2.htm不是空的时候才复制,而且必须是比index.htm更新的时候才复制。这样就需要一些脚本的支持了。

前几天写了一个(bat+xcopy实现只复制比目标文件更新的文件)还是出现为空的情况,这里特加些功能,参考很多网站的文章,感谢百度的结果很给力。

先来个bat版的
复制代码代码如下:

@echo off
::每5分钟复制以下首页
for /f %%i in ('dir /b c:\index2.htm') do (
set indexdx=%%~zi
)
if %indexdx% gtr 5120 (
echo y | xcopy c:\index2.htm /d /r /k c:\index.htm
)

其中
for /f %%i in ('dir /b c:\index2.htm') do (
set indexdx=%%~zi
)
是bat中获取index2.htm文件大小的。

然后通过if %indexdx% gtr 5120 (
实现判断是不是大于5120个字节

使用VBS实现的主要就是下面这个代码了功能更强,也比较简单
复制代码代码如下:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
set fn2=fso.GetFile("c:\index2.htm")
flsize2=fn2.size
fldate2=fn2.datelastmodified
set fn=fso.GetFile("c:\index.htm")
flsize1=fn.size
fldate1=fn.datelastmodified
If fso.FileExists("c:\index2.htm") and flsize2>50000 and fldate2>fldate1 Then
fso.getfile("c:\index2.htm").copy("c:\index.htm")
if err.number=0 then WriteHistory "成功"&now(),"log.txt"
end if

Sub WriteHistory(hisChars, path)
Const ForReading = 1, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(path, ForAppending, True)
f.WriteLine hisChars
f.Close
End Sub


还有日志功能,当前bat下也可以的。需要的可以自己扩展下。

 

出处:https://www.jb51.net/article/49195.htm

---------------------------------------------------------------------------------------

示例6:XCOPY的高级使用:指定日期并且用EXCLUDE排除指定文件

1.cmd到xcopyTime.bat所在目录,执行命令xcopyTime sourceFolder DestinationFolder dateTime
2.EXCLUDE.txt是排除的对象,不复制其中罗列的文件或文件夹

例子:
F:bat>xcopyTime E:workspace F:website 06-30-2010

EXCLUDE.txt内容,在下面的线里面
------------------------------
.classpath
.class
.log
------------------------------




@echo off
rem xcopy2.BAT transfers all files in all subdirectories of
rem the source drive or directory (%1) to the destination
rem drive or directory (%2)
rem lastModifyTime (%3)
xcopy %1 %2 /s /d:%3 /exclude:EXCLUDE.txt /y
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
===============EXCLUDE.txt文件内容如下===============
.classpath
.class
.log

您可能感兴趣的文章:

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)XCOPY只拷贝当天文件的实现代码bat+xcopy实现只复制比目标文件更新的文件利用xcopy命令实现本地文件复制到远程服务器的方法xcopy 实现批处理拷贝文件或文件夹Xcopy 复制文件和目录,包括子目录。海量文件复制和备份的技巧(xcopy命令实现)以上就是关于对XCOPY的高级使用:指定日期并且用EXCLUDE排除指定文件的详细介绍。欢迎大家对XCOPY的高级使用:指定日期并且用EXCLUDE排除指定文件内容提出宝贵意见

 

出处:https://www.easck.com/cos/2019/0130/268229.shtml

=======================================================================================

常见问题

问题1:询问是文件名还是目录名

xcopy在执行的时候,有时总是询问是文件名还是目录名

例如:我需要运行类似
xcopy /y a.xml .\pics\b.xml
需要运行很多次以上类似命令,但xcopy总是问我“文件名还是目录名”
可以这样通过管道来做
echo f | xcopy /y a.xml .\pics\b.xml

 

出处:https://www.cnblogs.com/moonlight-zjb/p/3588150.html

---------------------------------------------------------------------------------------

问题2:访问遭到拒绝

在使用xcopy命令从Windows复制到Linux的共享目录时,提示如下错误,会导致复制中断。

访问遭到拒绝
无法创建目录 - \\192.168.1.60\......\TestSVN\trunk\DBDcoumentCreater\DBDcoumentCreater

从Windows系统复制文件夹及文件到Linux系统的共享目录时,数据源文件夹里,有部分文件夹的属性是存档属性时,无法复制文件夹及内部的文件到Linux系统;但从本机Windows复制到网络上Windows共享或者Windows本机目录都是成功的。

查看文件夹属性:在需要查看的文件夹上点击右键属性  ==》高级,取消勾选“可以存档文件夹”前面的钩就可以了,如下图:

 再次运行命令,可以正常复制文件了。

---------------------------------------------------------------------------------------

问题3:用xcopy备份时,提示“内存不足”

一直以来,自己使用xcopy的脚本进行项目文件备份和整理,后来发现部分文件未备份成功,且脚本运行时会长时间无反应,并在最后显示“内存不足”字样。尝试加内存未解决,经检索确认,该问题是因为路径过长导致。
xcopy "源路径" "目标路径" /e/I/d/r/y
解决办法:改用Robocopy命令
RoboCopy "源路径" "目标路径" /E
完美解决问题~~

参考:https://blog.csdn.net/vbasicsuper/article/details/89094345

1)有的时候内存不足时因为出现了超长路径名称。如果是因为这个,你可以考虑添加一个/n参数。当然,这个参数会将所有过长的目录,文件夹名改为短的。所以这只能在不要求路径名的前提下使用。慎重。

2)请添加 /I 参数,即
XCOPY "E:\xx" "E:\xxx" /S /H /C /Y /I >> "E:\log.txt"
另,因为有 /C 参数(即使有错误,也继续复制。)所以会继续拷贝

3)尝试加个 /J 参数,该参数适合复制大文件时,可以不使用缓冲 I/O
追问:
问题还是一样,请问还有没有方法?
追答:
那检查拷贝路径中是否存在超长路径的文件夹。

参考:https://zhidao.baidu.com/question/1951473899478622628.html

---------------------------------------------------------------------------------------

问题4:使用/exclude参数排除文件时,文件名中包含的也会排除

今天在使用xcopy备份文件的时候,发现备份的文件缺少了,经过排查,发现缺少的文件名中,包含/exclude参数指定文件中排除的扩展名。

上面说的有点绕口,举个简单的例子就明白了,例如:在c:\11目录下有如下文件,

11.txt
12.txtab
12.txtab.xxx
13.txt.bak
333.txtcen.js
abc.js

在C:\Tmp\xcopyExclude.txt文件中就定义一个行:.tx

现在只想复制一份到c:\12目录下,执行: echo d|xcopy C:\11 C:\12 /e /s /y /h /r /exclude:C:\Tmp\xcopyExclude.txt

那么只有abc.js文件复制过去了,其他的文件都没有复制过去。从网上也找了一些资料:

你在寻找的是:
xcopy /R /D /I /S /Y /EXCLUDE:exclude.txt "C:\test1" "C:\test2"
连同以下内容exclude.txt:
.txt
.exe
但是,/EXCLUDE选择xcopy非常差.它并不真正排除具有给定扩展名的文件,它实际上排除了其完整路径包含.txt或.exe位于任何位置的所有项目.假设有一个源文件C:\test1\my.txt.files\file.ext,它也将被排除.
有几种方法可以解决这个问题,其中一些我想告诉你:
使用robocopy命令及其/XF选项:
robocopy "C:\test1" "C:\test2" /S /XO /XF "*.txt" "*.exe"
使用循环创建批处理文件,以及预过滤文件:for /Fxcopy /L
set /A "COUNT=0"
for /F "delims=" %%F in ('
    rem/ // List files that would be copied without `/L`; remove summary line: ^& ^
        cd /D "C:\test1" ^&^& xcopy /L /R /D /I /S /Y "." "C:\test2" ^| find ".\"
') do (
    rem // Check file extension of each file:
    if /I not "%%~xF"==".txt" if /I not "%~xF"==".exe" (
        rem // Create destination directory, hide potential error messages:
        2> nul mkdir "C:\test2\%%~F\.."
        rem // Actually copy file, hide summary line:
        > nul copy /Y "C:\test1\%%~F" "C:\test2\%%~F" && (
            rem // Return currently copied file:
            set /A "COUNT+=1" & echo(%%~F
        ) || (
            rem // Return message in case an error occurred:
            >&2 echo ERROR: could not copy "%%~F"!
        )
    )
)
echo         %COUNT% file^(s^) copied.

 

出处:https://qa.1r1g.com/sf/ask/2966897461/

posted on 2019-05-19 18:34  jack_Meng  阅读(3447)  评论(0编辑  收藏  举报

导航