cmd命令之Xcopy介绍_复制文件夹里所有文件到另一个文件夹操作方式

1 篇文章 3 订阅
1 篇文章 0 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

DOS批处理命令,永远是不朽的命令,不仅功能强大,同时,速度也是最快的!但是,很多新手学习计算机,都已经遗忘了本不该忘记的批处理命令


一、Xcopy是什么?

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

DOS批处理命令,在开发软件或项目的时候,都离不开这些基本的原始的命令。本文,我们来学习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:FileName1[+[FileName2]][+[FileName3]]] [{/y | /-y}] [/z] [/b] [/j]
参数使用方法
<Source> 必填参数。指定要复制的文件的位置和名称。此参数必须包含驱动器或路径。
[<Destination>]指定要复制的文件的目标。此参数可以包括驱动器号和冒号、目录名、文件名或这些的组合。
/w在开始复制文件之前显示以下消息并等待您的响应:按任意键开始复制文件
/p提示您确认是否要创建每个目标文件。
/c忽略错误。
/v在写入目标文件时验证每个文件,以确保目标文件与源文件相同。
/q禁止显示xcopy消息。
/f复制时显示源文件名和目标文件名。
/l显示要复制的文件列表。
/g当目标不支持加密时创建解密的目标文件。
/d [:MM-DD-YYYY]仅复制在指定日期或之后更改的源文件。如果不包含MM-DD-YYYY值,xcopy会复制所有比现有目标文件新的源文件。此命令行选项允许您更新已更改的文件。
/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不修改源文件的归档文件属性。
/m复制已设置存档文件属性的源文件。与/a不同,/m关闭源中指定的文件中的存档文件属性。
/n使用 NTFS 短文件或目录名称创建副本。当您将文件或目录从 NTFS 卷复制到 FAT 卷或目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要/n。目标文件系统可以是 FAT 或 NTFS。
/o复制文件所有权和自由访问控制列表 (DACL) 信息。
/x复制文件审核设置和系统访问控制列表 (SACL) 信息(隐含/o)。
/exclude:FileName1[+[FileName2]][+[FileName3]( )]指定文件列表。必须至少指定一个文件。每个文件将包含搜索字符串,每个字符串在文件中的单独行上。当任何字符串与要复制的文件的绝对路径的任何部分匹配时,该文件将被排除在复制之外。例如,指定字符串obj将排除目录obj下的所有文件或所有具有.obj扩展名的文件。
/y禁止提示确认您要覆盖现有目标文件。
/-y提示确认您要覆盖现有的目标文件。
/z以可重新启动模式通过网络复制。
/b复制符号链接而不是文件。此参数是在 Windows Vista® 中引入的。
/j复制文件而不缓冲。推荐用于非常大的文件。此参数是在 Windows Server 2008 R2 中添加的。
/?在命令提示符处显示帮助。
说明
1.使用/z
	如果您在复制阶段失去连接(例如,如果服务器脱机切断连接),它会在您重新建立连接后恢复。/z还显示每个文件完成的复制操作的百分比。
	
2.在 COPYCMD环境变量中 使用/y 
	您可以在 COPYCMD 环境变量中使用/y 。您可以通过在命令行上使用/-y来覆盖此命令。默认情况下,系统会提示您覆盖。
	
3.复制加密文件
	将加密文件复制到不支持 EFS 的卷会导致错误。首先解密文件或将文件复制到支持 EFS 的卷。
	
4.附加文件
	要附加文件,请为目标指定单个文件,但为源指定多个文件(即,使用通配符或 file1+file2+file3 格式)。

5.目标路径的默认值
	如果省略Destination,xcopy命令会将文件复制到当前目录。

6.指定Destination是文件还是目录
	如果Destination不包含现有目录并且不以反斜杠 () 结尾,则会出现以下消息:	
	Does <Destination> specify a file name or directory name on the target(F = file, D = directory)?
	如果您想将一个或多个文件复制到一个文件中,请按 F。如果要将文件复制到目录中,请按 D。
	您可以使用/i命令行选项禁止显示此消息,如果源是多个文件或目录,则xcopy会假定目标是一个目录。
	
7.使用xcopy命令设置目标文件的归档属性
	xcopy命令创建具有归档属性集的文件,无论该属性是否已在源文件中设置。
	
8.比较xcopy和diskcopy
	如果您的磁盘包含子目录中的文件,并且您想将其复制到具有不同格式的磁盘,请使用xcopy命令而不是diskcopy。因为diskcopy命令逐个磁道复制磁盘,所以源磁盘和目标磁盘必须具有相同的格式。xcopy命令没有这个要求。除非您需要完整的磁盘映像副本,否则请使用xcopy 。

9.xcopy的退出代码
	要处理xcopy返回的退出代码,请在批处理程序的if命令行上使用ErrorLevel参数。有关使用if处理退出代码的批处理程序示例,请参阅附加参考。下表列出了每个退出代码和说明。

退出代码				描述
	0				文件复制无误。
	1				找不到要复制的文件。
	2				用户按下 CTRL+C 来终止xcopy。
	4				发生初始化错误。没有足够的内存或磁盘空间,或者您在命令行中输入了无效的驱动器名称或无效的语法。
	5				发生磁盘写入错误。

三、使用示例

例1.要将所有文件和子目录(包括任何空子目录)从驱动器 A 复制到驱动器 B,请键入:

xcopy a: b: /s /e

例2.要在例1中包含任何系统文件或隐藏文件,请添加/h命令行选项,如下所示:

xcopy a: b: /s /e /h

例3.本机复制文件或文件夹的实例

代码如下(示例):

Xcopy d:\UpdateFiles e:\123  /s /e /y

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

例4.在局域网中的应用实例

代码如下(示例):

Xcopy \\192.168.0.168\UpdateFiles e:\123  /s /e /y

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

例5.要使用自 1993 年 12 月 29 日以来更改的 \Rawdata 目录中的文件更新 \Reports 目录中的文件,请键入:

xcopy \rawdata \reports /d:12-29-1993

例6.要更新例5中存在于 \Reports 中的所有文件,无论日期如何,请键入:

xcopy \rawdata \reports /u

例7.要获取例6中复制的文件列表(即,不实际复制文件),请键入:

xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out

例8.要将 \Customer 目录和所有子目录复制到网络驱动器 H: 上的目录 \Public\Address 中,保留只读属性,并在 H: 上创建新文件时提示,请键入:

xcopy \customer h:\public\address /s /e /k /p

例9.要发出前面的命令,请确保xcopy会创建 \Address 目录(如果它不存在),并禁止在创建新目录时出现消息,添加/i命令行选项,如下所示:

xcopy \customer h:\public\address /s /e /k /p /i

例10.您可以创建一个批处理程序来执行xcopy操作,并使用batch 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,然后使用带有/e和/s命令行选项的xcopy 。如果xcopy遇到错误,批处理程序读取退出代码并转到相应的IF ERRORLEVEL语句中指示的标签,然后显示相应的消息并退出批处理程序。

例11.此示例复制所有非空目录,以及名称与星号符号匹配的文件。

xcopy .\toc*.yml ..\..\Copy-To\ /S /Y

rem Output example.
rem  .\d1\toc.yml
rem  .\d1\d12\toc.yml
rem  .\d2\toc.yml
rem  3 File(s) copied

在前面的示例中,这个特定的源参数值.\toc*.yml 会复制相同的 3 个文件,即使它的两个路径字符.\已被删除。但是,如果从源参数中删除星号通配符,则不会复制任何文件,使其仅为.\toc.yml。

例12、结合/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 

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

例13、移动A目录的所有文件到B目录

移动A目录的所有文件到B目录,且保留A目录的目录结构;如果A下面有子目录,则在B中也创建相同目录,并把对应目录的文件移动到B的相同目录结构位置;(不移动系统文件和隐藏文件)

@echo off
rem 复制指定目录的目录结构到目标目录,并移动的文件到目标目录,且保留目录结构(空目录也复制),不保留系统文件和隐藏文件
set ObjPath=\\192.168.0.106\Temp Files\test\BPD\sourceFiles\ZOFUND
set DestPath=E:\Documents\ttFiles\sourceFiles\ces
set DestExt=* 
xcopy /e /c /y "%ObjPath%\%DestExt%" "%DestPath%"
del /a /s /q /f "%ObjPath%\"

例14、xcopy 排除文件拷贝

@echo off
::xcopy /y /s /e /I /exclude:uncopy.txt E:\NetWorkCMDA\CMDA0418\Portals\0 E:\Mu\Portals\0
::xcopy /y /s /e /I /exclude:uncopy.txt C:\Docume~1\wangchao\桌面\MyTest C:\Docume~1\wangchao\桌面\aaa
echo 返回默认情况下应用程序存储数据的位置=%APPDATA%
echo 返回当前目录字符串=%CD%
echo 返回计算机的名称=%COMPUTERNAME% 
echo 返回命令行解释器可执行程序的准确路径=%COMSPEC% 
echo 返回当前登录的用户的名称=%USERNAME%
echo 返回包含用户帐户的域的名称=%USERDOMAIN%
echo 返回当前用户的配置文件的位置=%USERPROFILE%
set myExist=%windir%\TestUncopy
set myCommand=%windir%\TestUncopy&echo TestUncopy
if not exist %myExist% mkdir %myCommand%

set myExist1=%windir%\TestUncopy\a
set myCommand1=%windir%\TestUncopy\a&echo TestUncopy\a
if not exist %myExist1% mkdir %myCommand1%

set myExist2=%windir%\TestUncopy\aa
set myCommand2=%windir%\TestUncopy\aa&echo TestUncopy\aa
if not exist %myExist2% mkdir %myCommand2%

set myExist3=%windir%\TestUncopy\a\b
set myCommand3=%windir%\TestUncopy\a\b&echo TestUncopy\a\b
if not exist %myExist3% mkdir %myCommand3%





set myExist4=%windir%\TestUncopySource
set myCommand4=%windir%\TestUncopySource&echo TestUncopySource
if not exist %myExist4% mkdir %myCommand4%


set myExist5=%windir%\TestUncopy\aaa
set myCommand5=%windir%\TestUncopy\aaa&echo TestUncopy\aaa
if not exist %myExist5% mkdir %myCommand5%

set copyFile=%windir%\system\COMMDLG.DLL
if not exist %myExist1%\m1.dll copy  %copyFile% %myExist1% /y
if not exist %myExist2%\m2.dll copy  %copyFile% %myExist2% /y
if not exist %myExist3%\m3.dll copy  %copyFile% %myExist3% /y
if not exist %myExist5%\m5.dll copy  %copyFile% %myExist5% /y

if not exist %myExist1%\m1.dll ren  %myExist1%\COMMDLG.DLL m1.dll
if not  exist %myExist2%\m2.dll ren  %myExist2%\COMMDLG.DLL m2.dll
if not  exist %myExist3%\m3.dll ren  %myExist3%\COMMDLG.DLL m3.dll
if not  exist %myExist5%\m5.dll ren  %myExist5%\COMMDLG.DLL m5.dll


if not exist %myExist5%\txt1.exe copy  %windir%\system32\notepad.exe %myExist5% /y
if not exist %myExist5%\txt1.exe ren  %myExist5%\notepad.exe txt1.exe

if not exist %myExist5%\txt2.exe copy  %windir%\system32\notepad.exe %myExist5% /y
if not exist %myExist5%\txt2.exe ren  %myExist5%\notepad.exe txt2.exe

if not exist %myExist5%\txt3.exe copy  %windir%\system32\notepad.exe %myExist5% /y
if not exist %myExist5%\txt3.exe ren  %myExist5%\notepad.exe txt3.exe

set OutFile=uncopy.txt
::MyDir=\aa\ 排除的文件夹
::MySubDir=\a\b\ 排除的子文件夹
::MyFile=m3.dll 排除的文件
::set MyFile1=.exe 排除的类型文件
set MyDir=\aa\
set MySubDir=\a\b\
set MyFile=m3.dll
set MyFile1=.exe
echo %MyDir% >uncopy.txt
echo %MySubDir% >>uncopy.txt
echo %MyFile% >>uncopy.txt
echo %MyFile1% >>uncopy.txt
xcopy /y /s /e /I /exclude:uncopy.txt %windir%\TestUncopy %windir%\TestUncopySource

::if exist %windir%\TestUncopy del %windir%\TestUncopy /s /q&rd %windir%\TestUncopy /s /q &echo del_rd %windir%\TestUncopy
::if exist %windir%\TestUncopySource del %windir%\TestUncopySource /s /q&rd %windir%\TestUncopySource /s /q &echo del_rd %windir%\TestUncopySource
::del uncopy.txt

start %myExist%
start %myExist4%

echo 是否删除(Y/N)
set /p shuru=
::if %shuru:~0,1%==y (echo %shuru:~0,1%&goto del)
::if %shuru:~0,1%==Y (echo %shuru:~0,1%&goto del)
::if %shuru:~0,1%==n (echo %shuru:~0,1%&goto End)
::if %shuru:~0,1%==N (echo %shuru:~0,1%&goto End)  
if %shuru:~0,1%==y (cls&goto del)
if %shuru:~0,1%==Y (cls&goto del)
if %shuru:~0,1%==n (cls&goto End)
if %shuru:~0,1%==N (cls&goto End)  
pause
:del
if exist %windir%\TestUncopy del %windir%\TestUncopy /s /q&rd %windir%\TestUncopy /s /q &echo del_rd %windir%\TestUncopy
if exist %windir%\TestUncopySource del %windir%\TestUncopySource /s /q&rd %windir%\TestUncopySource /s /q &echo del_rd %windir%\TestUncopySource
if exist uncopy.txt del uncopy.txt
:End
echo.& ::换行
echo 操作已经完成
timeout /t 3 /nobreak
cls

echo 是否重新调用(Y/N)--Y:调用 N:退出
set /p shuru=
if %shuru:~0,1%==y (cls&goto MyCall)
if %shuru:~0,1%==Y (cls&goto MyCall)
if %shuru:~0,1%==n (cls&goto EndExit)
if %shuru:~0,1%==N (cls&goto EndExit) 
:EndExit
exit 
:MyCall
uncopy.bat

pause

例15、xcopy与EXCLUDE参数的用法

示例一:例如,我要将"WebAppBuytoy"目录备份一份到"WebAppBuytoy_bak",但要排除其下面的"WebAppBuytoy\product\ProdImages"子目录,因为它太大且没有变化没有必要备份.

步骤一,新建一个文本文件叫"EXCLUDE.txt",内容如下:

product\ProdImages

步骤二,命令(包含子目录,不提示覆盖):

xcopy WebAppBuytoy WebAppBuytoy_bak /e /EXCLUDE:EXCLUDE.txt /y

示例二: 发布.net的Web项目批处理

deploy_web.cmd

xcopy G:\WebSites\BuytoySolutionV2\WebAppBuytoy web /EXCLUDE:web_exclude.txt /i /e /y
@rem 将排除的*.css文件补回
xcopy G:\WebSites\BuytoySolutionV2\WebAppBuytoy\App_Themes web\App_Themes /i /e /y
@pause

web_exclude.txt:

.cs
.vb
.pdb
.csproj
.csproj.user
.Publish.xml
.___
.cmd
.rar
\App_Themes\Theme1
\App_Themes\Theme1\
\obj
\obj\
\Properties
\Properties\
\App_Data\
\App_Classes\

示例三: 发布.net的Web项目批处理,但排除商品图片目录,因为它太大且不常更新,

重复使用上面那个排除文件“web_exclude.txt”,再加一个排除商品图片的排除文件
“web_exclude_prodImages.txt”,这样要在一个命令中使用多个排除文件列表,用到加号“+”:
deploy_web_排除商品图片.cmd

xcopy G:\WebSites\BuytoySolutionV2\WebAppBuytoy web 
/EXCLUDE:web_exclude.txt+web_exclude_prodImages.txt /i /e /y
@rem 将排除的*.css文件补回
xcopy G:\WebSites\BuytoySolutionV2\WebAppBuytoy\App_Themes web\App_Themes /i /e /y
@pause

web_exclude_prodImages.txt

\product\ProdImages
\product\ProdImages\

到此这篇关于Xcopy命令参数使用介绍的文章就介绍到这了。


四、小结

将此Xcopy命令与python结合使用可大大提高工作效率

批处理真好用…

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激动的兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值