首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作备份文件夹的批处理脚本。仅新文件和修改过的文件

制作备份文件夹的批处理脚本。仅新文件和修改过的文件
EN

Stack Overflow用户
提问于 2012-07-01 14:41:34
回答 4查看 59.3K关注 0票数 4

我需要一个脚本将C:\Dropbox中已更改/修改的文件和新文件复制到C:\backup。为什么只复制文件夹结构:

代码语言:javascript
复制
@echo off

set destination=C:\Backup
set source=C:\Users\XXXX\Dropbox\Intranet

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k

xcopy %source%"\*" %destination%"\*" /m/e/y
mkdir %destination%"\LastBackupDate %yyyymmdd1%"
echo A folder containing the latest date has been created in root directory of %source%.
echo Finished copying %source% to %destination%
echo.
pause
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-01 17:08:00

代码语言:javascript
复制
ECHO OFF
set source=C:\Users\xxxx\Dropbox\
set destination=C:\Backup\

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k

if exist %destination% goto GO
:GO
mkdir %destination%%yyyymmdd1%
xcopy %source%* %destination% /s/d/y/c/v/r
echo. 
echo Finished copying %source% to %destination%
echo.
echo Created %destination%%yyyymmdd1%
pause
票数 6
EN

Stack Overflow用户

发布于 2017-07-01 19:54:07

这是一个通用备份脚本。

代码语言:javascript
复制
@echo off
REM get start time
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

REM set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
set "logtimestamp=%YYYY%.%MM%.%DD% %HH%:%Min%:%Sec%"

REM actual copy
set source=%1
set destination=%2

REM create the exclusion list
set exclusion=%3
set exclusion=%exclusion:"=%
(for %%i in (%exclusion%) do echo %%i) > exclusion.txt

REM set the file name for the logging data
set log=log-%fullstamp%.txt

REM start the backup process
echo // started backup at %logtimestamp% > %log%
echo // from %~f1 to %~f2\ >> %log%

echo ---- >> %log%
xcopy %source% %destination% /S /E /C /D /H /R /Y /V /I /EXCLUDE:exclusion.txt >> %log%
echo ---- >> %log%
del /f exclusion.txt

REM get finish time
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "logtimestamp=%YYYY%.%MM%.%DD% %HH%:%Min%:%Sec%"

echo // finished backup at %logtimestamp% >> %log%

REM move the logging
if not exist "%destination%\.backup_log" mkdir %destination%\.backup_log
move %log% %destination%\.backup_log

假设批处理脚本名为backup.bat:

代码语言:javascript
复制
backup.bat MyFolder h:\MyFolder .metadata

其中,将MyFolder的内容备份到h:\MyFolder,并忽略所有名为“.metadata”的文件夹。将创建h:\驱动器上的文件夹'MyFolder‘(如果不可用)。

此脚本的功能:

  • 创建所有必需的文件夹
  • 会复制自上次备份以来修改过的所有文件
  • 会在目标文件夹中创建一个用于记录数据的文件夹,名为:.backup_log
  • Creates a log-file,其中包含运行xcopy时的所有信息以及启动和停止时间的时间戳。

更新:如果您没有排除列表,请将"“作为第三个参数。

票数 2
EN

Stack Overflow用户

发布于 2016-12-23 08:08:42

为了回答最初的问题,为什么你的脚本只复制了文件夹结构...

由于xcopy上的参数,您只指定了这些/m/e/y:

/M =仅复制设置了archive属性的文件,关闭archive属性。

/E =复制目录和子目录,包括空目录。/Y =禁止确认。

请注意,正如前面给出的答案,只需添加/D并删除/M就可以了,请查看帮助中关于/D的说明:

/D:m-d-y复制在指定日期或之后更改的文件。如果未指定日期,则仅复制源时间晚于目标时间的文件。

如果你需要在一次运行中备份多个文件夹,并且有一个日志文件来记录它们的执行,你可以有这样的文件:

代码语言:javascript
复制
@echo off

call:backUpFolder "C:\Users\XXX\folder1" "C:\Backup\folder1"
call:backUpFolder "C:\Users\XXX\folder2" "C:\Backup\folder2"
call:backUpFolder "C:\Users\XXX\folder3" "C:\Backup\folder3"

goto:eof
::--------------------------------------------------
::-- This is the function to back up one folder
::--------------------------------------------------
:backUpFolder
set source="%~1"
set destination="%~2"
echo copying from %source% to %destination%

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6%

xcopy %source%"\*" %destination%"\*" /s/d/y/c/v/r

echo %ldt%: %source% to %destination% >> backHistory.log
echo Finished copying %source% to %destination%
goto:eof
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11280077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档