xcopy "C:\Users\me\Documents\ApplyPatchBat" "C:\Users\me\Desktop\Test\" /S/E/K
这可以复制所有文件,包括子文件夹中的文件。我知道你可以添加/ y使其自动覆盖。
如果我们要复制的文件存在于目标文件夹中,我想如何创建语句,将目标文件夹中的文件复制到备份文件夹。
我想知道在检测文件是否存在的命令之后我可以添加任何IF语句吗?或者在询问我是否要覆盖时可能会进行错误级别检查?
附:这是为了将新补丁应用到程序中,其中有多层文件夹,这就是我在xcopy中使用/ S / E / K的原因。
答案 0 :(得分:3)
xcopy本身无法预先备份,但是使用xcopy的输出和一些for循环魔法可以实现这一点
@echo off
setlocal ENABLEDELAYEDEXPANSION
set source="C:\Users\me\Documents\ApplyPatchBat"
set target="C:\Users\me\Desktop\Test\"
rem /l = list only, /u = already existing, /y = yes to replace
rem /f = display full source and destination file names, /c = continue on errors
rem /s = subdirectories, /k = keep attributes
rem split the strings at ->, we're only interested in the part after ->
for /f "usebackq tokens=1,* delims=>" %%a in (`xcopy %source% %target% /l /u /y /f /c /s /k`) do (
set file=%%b
rem ignore lines without a destination, e.g. 15 file(s) copied
if x!file! neq x (
rem remove the leading space, original string is source -> destination
set file=!file:~1!
for %%f in ("!file!") do (
if not exist %%~dpf\backup\* md %%~dpf\backup
rem only backup if not already backed up
if not exist %%~dpf\backup\%%~nxf move %%f %%~dpf\backup
)
)
)
xcopy %source% %target% /y /c /q /s /k