代码改变世界

批处理备份后发布文件夹

2012-09-07 11:29  lierlier  阅读(276)  评论(1)    收藏  举报

先将"C:\网站"下对应"D:\工程1"下面的所有文件夹和文件备份到"D:\备份2012-9-1-52647",然后再把"D:\工程1"发布到"C:\网站"。

用法:

backupAndPublish.bat "D:\工程1"

 1 @echo off
 2 
 3 set SourceDir=%1
 4 set now=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
 5 
 6 ::参数
 7 set DestDir="C:\网站"
 8 set BackDir="D:\备份%now%"
 9 echo.
10 echo 正在备份
11 call:Backup %SourceDir% %DestDir% %BackDir%
12 echo.
13 echo 正在发布
14 call:Publish %SourceDir% %DestDir%
15 
16 goto :eof
17 
18 :: 主程序
19 :Backup
20 setlocal enabledelayedexpansion
21 
22 set SourceDir=%~1
23 set DestDir=%~2
24 set BackDir=%~3
25 
26 :: 计算源路径长度
27 set SourceDirLen=0
28 set SourceDirStr=%SourceDir%
29 
30 :next1
31 if not "%SourceDirStr%"=="" (
32     set /a SourceDirLen+=1
33     set "SourceDirStr=%SourceDirStr:~1%"
34     goto :next1
35 )
36 
37 :: 备份
38 for /r "%SourceDir%" %%i in (*.*) do (
39     set BackPath=%%~dpi
40     set BackPath=%BackDir%!BackPath:~%SourceDirLen%!
41     set DestPath=%%i
42     set DestPath=%DestDir%!DestPath:~%SourceDirLen%!
43     set BackFilePath=%%i
44     set BackFilePath=%BackDir%!BackFilePath:~%SourceDirLen%!
45     
46     echo !DestPath!
47     xcopy "!DestPath!" "!BackPath!" /r /y >nul 2>nul
48     if not exist "!BackFilePath!" (echo 备份复制失败)
49 )
50 
51 for /r "%SourceDir%" %%i in (\) do (
52     set SourcePath=%%i
53     set SourcePath=!SourcePath:~0,-1!
54     set BackPath=%BackDir%!SourcePath:~%SourceDirLen%!
55 
56     md "!BackPath!" >nul 2>nul
57 )
58 
59 setlocal disabledelayedexpansion
60 goto :eof
61 
62 :: 发布
63 :Publish
64 set SourceDir=%1
65 set DestDir=%2
66 
67 xcopy %SourceDir% %DestDir% /r /y /i /e
68 
69 goto :eof