概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、Xcopy是什么?
- 二、Xcopy参数介绍
- 三、使用示例
- 例1.要将所有文件和子目录(包括任何空子目录)从驱动器 A 复制到驱动器 B,请键入:
- 例2.要在例1中包含任何系统文件或隐藏文件,请添加/h命令行选项,如下所示:
- 例3.本机复制文件或文件夹的实例
- 例4.在局域网中的应用实例
- 例5.要使用自 1993 年 12 月 29 日以来更改的 Rawdata 目录中的文件更新 Reports 目录中的文件,请键入:
- 例6.要更新例5中存在于 Reports 中的所有文件,无论日期如何,请键入:
- 例7.要获取例6中复制的文件列表(即,不实际复制文件),请键入:
- 例8.要将 Customer 目录和所有子目录复制到网络驱动器 H: 上的目录 \PublicAddress 中,保留只读属性,并在 H: 上创建新文件时提示,请键入:
- 例9.要发出前面的命令,请确保xcopy会创建 Address 目录(如果它不存在),并禁止在创建新目录时出现消息,添加/i命令行选项,如下所示:
- 例10.您可以创建一个批处理程序来执行xcopy操作,并使用batch if命令在发生错误时处理退出代码。例如,以下批处理程序对xcopy源和目标参数使用可替换参数:
- 例11.此示例复制所有非空目录,以及名称与星号符号匹配的文件。
- 例12、结合/d标签,实现只复制比目标文件新的文件
- 例13、移动A目录的所有文件到B目录
- 例14、xcopy 排除文件拷贝
- 例15、xcopy与EXCLUDE参数的用法
- 示例一:例如,我要将"WebAppBuytoy"目录备份一份到"WebAppBuytoy_bak",但要排除其下面的"WebAppBuytoyproductProdImages"子目录,因为它太大且没有变化没有必要备份.
- 示例二: 发布.net的Web项目批处理
- 示例三: 发布.net的Web项目批处理,但排除商品图片目录,因为它太大且不常更新,
- 四、小结
前言
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.168UpdateFiles 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: 上的目录 PublicAddress 中,保留只读属性,并在 H: 上创建新文件时提示,请键入:
xcopy customer h:publicaddress /s /e /k /p
例9.要发出前面的命令,请确保xcopy会创建 Address 目录(如果它不存在),并禁止在创建新目录时出现消息,添加/i命令行选项,如下所示:
xcopy customer h:publicaddress /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
.d1toc.yml
rem
.d1d12toc.yml
rem
.d2toc.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.106Temp FilestestBPDsourceFilesZOFUND
set DestPath=E:DocumentsttFilessourceFilesces
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:NetWorkCMDACMDA0418Portals E:MuPortals
::xcopy /y /s /e /I /exclude:uncopy.txt C:Docume~1wangchao桌面MyTest C:Docume~1wangchao桌面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%TestUncopya
set myCommand1=%windir%TestUncopya&echo TestUncopya
if not exist %myExist1% mkdir %myCommand1%
set myExist2=%windir%TestUncopyaa
set myCommand2=%windir%TestUncopyaa&echo TestUncopyaa
if not exist %myExist2% mkdir %myCommand2%
set myExist3=%windir%TestUncopyab
set myCommand3=%windir%TestUncopyab&echo TestUncopyab
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%TestUncopyaaa
set myCommand5=%windir%TestUncopyaaa&echo TestUncopyaaa
if not exist %myExist5% mkdir %myCommand5%
set copyFile=%windir%systemCOMMDLG.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%system32notepad.exe %myExist5% /y
if not exist %myExist5%txt1.exe ren
%myExist5%notepad.exe txt1.exe
if not exist %myExist5%txt2.exe copy
%windir%system32notepad.exe %myExist5% /y
if not exist %myExist5%txt2.exe ren
%myExist5%notepad.exe txt2.exe
if not exist %myExist5%txt3.exe copy
%windir%system32notepad.exe %myExist5% /y
if not exist %myExist5%txt3.exe ren
%myExist5%notepad.exe txt3.exe
set OutFile=uncopy.txt
::MyDir=aa 排除的文件夹
::MySubDir=ab 排除的子文件夹
::MyFile=m3.dll 排除的文件
::set MyFile1=.exe 排除的类型文件
set MyDir=aa
set MySubDir=ab
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",但要排除其下面的"WebAppBuytoyproductProdImages"子目录,因为它太大且没有变化没有必要备份.
步骤一,新建一个文本文件叫"EXCLUDE.txt",内容如下:
productProdImages
步骤二,命令(包含子目录,不提示覆盖):
xcopy WebAppBuytoy WebAppBuytoy_bak /e /EXCLUDE:EXCLUDE.txt /y
示例二: 发布.net的Web项目批处理
deploy_web.cmd
xcopy G:WebSitesBuytoySolutionV2WebAppBuytoy web /EXCLUDE:web_exclude.txt /i /e /y
@rem 将排除的*.css文件补回
xcopy G:WebSitesBuytoySolutionV2WebAppBuytoyApp_Themes webApp_Themes /i /e /y
@pause
web_exclude.txt:
.cs
.vb
.pdb
.csproj
.csproj.user
.Publish.xml
.___
.cmd
.rar
App_ThemesTheme1
App_ThemesTheme1
obj
obj
Properties
Properties
App_Data
App_Classes
示例三: 发布.net的Web项目批处理,但排除商品图片目录,因为它太大且不常更新,
重复使用上面那个排除文件“web_exclude.txt”,再加一个排除商品图片的排除文件
“web_exclude_prodImages.txt”,这样要在一个命令中使用多个排除文件列表,用到加号“+”:
deploy_web_排除商品图片.cmd
xcopy G:WebSitesBuytoySolutionV2WebAppBuytoy web
/EXCLUDE:web_exclude.txt+web_exclude_prodImages.txt /i /e /y
@rem 将排除的*.css文件补回
xcopy G:WebSitesBuytoySolutionV2WebAppBuytoyApp_Themes webApp_Themes /i /e /y
@pause
web_exclude_prodImages.txt
productProdImages
productProdImages
到此这篇关于Xcopy命令参数使用介绍的文章就介绍到这了。
四、小结
将此Xcopy命令与python结合使用可大大提高工作效率
批处理真好用…
最后
以上就是朴素烧鹅为你收集整理的cmd命令之Xcopy介绍_复制文件夹里所有文件到另一个文件夹操作方式前言一、Xcopy是什么?二、Xcopy参数介绍三、使用示例四、小结的全部内容,希望文章能够帮你解决cmd命令之Xcopy介绍_复制文件夹里所有文件到另一个文件夹操作方式前言一、Xcopy是什么?二、Xcopy参数介绍三、使用示例四、小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复