赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
DOS批处理命令,永远是不朽的命令,不仅功能强大,同时,速度也是最快的!但是,很多新手学习计算机,都已经遗忘了本不该忘记的批处理命令
Xcopy是copy的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件;
值得注意的是
1.使用时源盘符、源目标路径名、源文件名至少指定一个;
2.选用/S时对源目录下及其子目录下的所有文件进行COPY。
3.除非指定/E参数,否则/S不会拷贝空目录,若不指定/S参数,则XCOPY只拷贝源目录本身的文件,而不涉及其下的子目录;
4.选用/V参数时,对的拷贝的扇区都进行较验,但速度会降低。
DOS批处理命令,在开发软件或项目的时候,都离不开这些基本的原始的命令。本文,我们来学习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 发生磁盘写入错误。
xcopy a: b: /s /e
xcopy a: b: /s /e /h
代码如下(示例):
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 文件夹;参数说明:在复制文件的同时也复制空目录或子目录,如果目标路径已经有相同文件了,使用覆盖方式而不进行提示。
xcopy \rawdata \reports /d:12-29-1993
xcopy \rawdata \reports /u
xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out
xcopy \customer h:\public\address /s /e /k /p
xcopy \customer h:\public\address /s /e /k /p /i
@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语句中指示的标签,然后显示相应的消息并退出批处理程序。
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。
假如现在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
经测试如果目标文件与源文件相同则不复制。确实一定程度了减少了对硬盘的读写。
移动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%\"
@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
步骤一,新建一个文本文件叫"EXCLUDE.txt",内容如下:
product\ProdImages
步骤二,命令(包含子目录,不提示覆盖):
xcopy WebAppBuytoy WebAppBuytoy_bak /e /EXCLUDE:EXCLUDE.txt /y
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\
重复使用上面那个排除文件“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结合使用可大大提高工作效率
批处理真好用…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。