Board logo

标题: [文件操作] 批处理怎样同步文件夹? [打印本页]

作者: zhanglei1371    时间: 2014-1-29 22:44     标题: 批处理怎样同步文件夹?

本帖最后由 zhanglei1371 于 2014-1-31 23:44 编辑

各位好,想求助个文件夹内文件同步问题,源文件夹是C:\源  文件夹,目标文件夹是优盘根目录中,一个名为“同步  文件夹”的文件夹,要求如下:
1 优盘盘符插在电脑上显示的有可能是E之后的任一盘符,此处自动查找定位到此目录,处理包括子目录中的所有文件(注意文件夹名中存在的空格);
2 如果源文件夹中存在同步文件夹中没有的文件,则按目录结构复制过去;但是,有些文件命名是日期+空格+文件名的形式,可能会出现前半部分不同,后半部分相同的情况,如2014-01-23 ABC.DOC和2014-01-28 ABC.DOC,这时就将前者删去,将后者复制过去,否则不动,保留日期最新的;
3 文件名称完全相同且大小也完全相同的不变;
4 文件名相同的保留体积较大的,删除体积小的;
对于二楼的答案,太粗糙了,还需要手动选择,而且删除时没有针对性,另外复制时目录层次结构不对应,不太符合需要。最好是双击后自动按要求完成,不需要手动过程。
先谢过各位了!
作者: 飞翔的小鸟    时间: 2014-1-30 17:57

本帖最后由 飞翔的小鸟 于 2014-1-30 18:02 编辑

菜鸟给你写一个.呵呵,.就这几行都累死我了
注意啊,如果你要复制2014-1-1 abc.doc 那你你优盘里所有目录下带有abc.doc的文件都会被删除.比如cabc.doc
@echo off
set /p disk=请输入要同步目标盘符例如d,e,f
if not defined disk goto end
for /f "delims=" %%b in ('xcopy /s/e/d/l C:\源文件夹 %disk%:\同步文件夹\') do (
   for /f "tokens=2 delims= " %%c in ("%%~nxb") do del /s/f/q/a %disk%:\同步文件夹\*%%c
)
xcopy /s/e/d/h/v/r C:\源文件夹 %disk%:\同步文件夹\
:end
作者: zhanglei1371    时间: 2014-1-30 23:44

本帖最后由 zhanglei1371 于 2014-1-31 00:02 编辑

回复 2# 飞翔的小鸟


    呵呵,写的太简单了,远远没有达到我的需要,不过还是感谢帮助@
我使用多重if嵌套
if中包含for.for中再包含if,if中再包含if或for,结果发现括号就不对了,也许批处理不支持这么多的嵌套...
作者: binghejin    时间: 2014-1-31 23:18

本帖最后由 binghejin 于 2014-2-2 16:13 编辑

明天帮你写,不过我也很菜鸟,努力试试,也算是练习了。
作者: binghejin    时间: 2014-2-2 16:11

本帖最后由 binghejin 于 2014-2-2 16:21 编辑

用了一天的时间写完,又用了半天的时间完善、测试,似乎还不是很完善,处理起来效率不是很高,请大神们再修改!
我把反向处理专门设置了一个选择项,如果需要默认就可以反向处理的的话,就把那个选择项去掉就好了。
  1. @echo off
  2. if exist mubiao.txt del mubiao.txt>nul
  3. if exist yuan.txt del yuan.txt>nul
  4. if exist butong.txt del butong.txt>nul
  5. cls
  6. echo.
  7. ::>>>>>>>>>>>>>>>程序开始前动作
  8. COLOR 08
  9. MODE con: COLS=80 LINES=30
  10. title 自动同步到U盘V1.0
  11. ::>>>>>>>>>>>>>>主界面开始
  12. echo=
  13. echo 自动同步到U盘V1.0
  14. echo ===================
  15. echo 请插入U盘,准备好后按任意键开始。
  16. pause>nul
  17. ::>>>>>>>>>>>>>>确定U盘盘符
  18. echo=
  19. echo 正在确定U盘盘符...
  20. set "var1=fsutil fsinfo drives"
  21. set "var2=fsutil fsinfo drivetype"
  22. for /f "delims=驱动器:\ " %%a in ('%var1%^|more') do (
  23.      for /f "delims=:" %%b in ('%var2% %%a: ^| find/i "可移动驱动器"') do (
  24.      call set "pan=%%pan%%%%b"
  25. ))
  26. set "u=%pan:~-1%"
  27. dir %u%: >%u%:\tb
  28. if not exist %u%:\tb goto U盘出错
  29. del %u%:\tb
  30. ::>>>>>>>>>>>>>>设置源文件夹及同步文件夹
  31. set yuan="e:\源 文件夹"
  32. set tongbu="%u%:\同步 文件夹"
  33. if not exist %yuan% goto 源文件夹不存在
  34. if not exist %tongbu% goto 目标文件夹不存在
  35. ::>>>>>>>>>>>>>>>>>>开始同步不存在的目录及文件
  36. echo=
  37. echo 正在同步中,请不要拔出U盘...
  38. echo n |xcopy %yuan%\*.* %tongbu%\ /s /e /c /q /h /d >nul 2>nul
  39. xcopy %yuan%\*.* %tongbu%\ /d /e /y >nul 2>nul
  40. echo=
  41. echo 完成...
  42. ::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>开始查找U盘多余的文件,删除。
  43. echo=
  44. echo 是否开始反向处理?【Y=确认 其他键=退出】
  45. echo 如果选择确认,那么将开始比照源盘文件,如果源盘某文件或目录被删除,
  46. echo U盘上相同的文件或目录也将被删除,请谨慎选择...
  47. set /p c=请输入:
  48. if "%c%"=="y" goto y
  49. goto end
  50. :y
  51. cls
  52. echo=
  53. echo 自动同步到U盘——反向处理V1.0
  54. echo ==========================
  55. echo 正在列表...
  56. dir %yuan% /b /s >yuan.txt
  57. dir %tongbu% /b /s >tongbu.txt
  58. for /f "delims=\ tokens=2,*" %%d in (yuan.txt) do echo %%d %%e>>yuan1.txt
  59. for /f "tokens=3,*" %%f in (yuan1.txt) do echo %%f %%g>>yuan2.txt
  60. del yuan.txt
  61. del yuan1.txt
  62. ren yuan2.txt yuan.txt
  63. for /f "delims=\ tokens=2,*" %%h in (tongbu.txt) do echo %%h %%i>>tongbu1.txt
  64. for /f "tokens=3,*" %%j in (tongbu1.txt) do echo %%j %%k>>tongbu2.txt
  65. del tongbu.txt
  66. del tongbu1.txt
  67. ren tongbu2.txt tongbu.txt
  68. echo=
  69. echo 正在查询,请稍等...
  70. for /f "delims=" %%l in (tongbu.txt) do (
  71.      type yuan.txt |find /i "%%l" >nul ||echo %%l >>butong.txt
  72. )
  73. del yuan.txt>nul
  74. del tongbu.txt>nul
  75. if not exist butong.txt echo=&&echo 没有需要反向处理的文件及目录&&goto end
  76. echo=
  77. echo 正在反向处理...
  78. for /f %%m in (butong.txt) do (
  79. echo y|del %tongbu%\%%m >nul 2>nul
  80. )
  81. for /f %%n in (butong.txt) do (
  82. echo y|rd %tongbu%\%%n >nul 2>nul
  83. )
  84. del butong.txt>nul 2>nul
  85. echo=
  86. echo 反向处理完成...
  87. goto end
  88. ::>>>>>>>>>>>>>>>>>>出错提示
  89. :源文件夹不存在
  90. echo=
  91. echo %yuan% 不存在,请检查...
  92. goto end
  93. :目标文件夹不存在
  94. echo %tongbu% 不存在,请检查...
  95. goto end
  96. :U盘出错
  97. echo U盘没有准备好或不可写,请检查。
  98. goto end
  99. :end
  100. echo=
  101. echo 按任意键退出...
  102. pause>nul
复制代码

作者: 飞翔的小鸟    时间: 2014-2-3 09:33

呵呵,回头加个自动判断u盘的..你要删除要个什么样的针对性?还有你说另外复制时目录层次结构不对应....这要是xcopy复制的目录还有不对应的...那批处理应该解决不了你的问题.
论坛里有同步文件的批处理,你可以搜索一下参考.
作者: zhanglei1371    时间: 2014-2-3 22:48

回复 5# binghejin


   非常感谢您的帮助!!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2