Board logo

标题: [文件操作] 单纯的批处理本身,能否实现单向备份同步? [打印本页]

作者: ygqiang    时间: 2017-1-4 21:34     标题: 单纯的批处理本身,能否实现单向备份同步?

单纯的批处理本身,能否实现单向备份同步?

A→B单向备份同步
1、B目录下,如果有多余的文件、文件夹。也能自动删除。
2、B目录下有完全相同的文件,就自动忽略/跳过,不再重复删除/复制。
3、不能调用第三方exe软件。比如robocopy.exe等等
作者: ygqiang    时间: 2017-1-4 21:39

本帖最后由 ygqiang 于 2017-1-4 21:50 编辑

http://www.bathome.net/redirect. ... 49484&ptid=8898

用了这个帖子10楼的代码。

call 同步文件夹syncFolder.bat c:\00 d:\test

测试了。不能实现:
1、d:\test目录下,如果有多余的文件、文件夹。也能自动删除。
作者: hlzj88    时间: 2017-1-4 22:02

初次备份,删b为空
或者for b下所有文件,a中不存在同名文件就删除b下的。
作者: GNU    时间: 2017-1-4 22:58

你希望如何判断“完全相同的文件”?
文件名、大小、修改时间等不靠谱,需要计算文件的MD5来判断吗?
作者: GNU    时间: 2017-1-4 22:59

回复 3# hlzj88


    应该不会这么简单。同名的文件,内容可能完全不同。
作者: ygqiang    时间: 2017-1-5 08:08

回复 3# hlzj88

回复 5# GNU


原来一直用下面的命令,可以实现1楼的几个要求。
robocopy.exe "源路径" "目标路径"  /mir /w:2 /r:2

如果用单纯的批处理,实现起来是否容易?
作者: ygqiang    时间: 2017-1-5 08:09

回复 4# GNU


    如何判断“完全相同的文件”?

判断标准只要实现:B文件夹内容,与A文件夹完全一样就行。
作者: GNU    时间: 2017-1-5 10:35

回复 7# ygqiang


    根据什么来判断“完全一样”?文件名、大小、修改时间等不靠谱,需要计算文件的MD5来判断吗?
作者: ygqiang    时间: 2017-1-5 15:12

回复 8# GNU

关于如何判断“完全相同的文件”。

    robocopy.exe "源路径" "目标路径"  /mir /w:2 /r:2
运行这个命令,可以实现1楼的所有要求。具体不知道是如何实现的。
作者: CrLf    时间: 2017-1-7 15:16

本帖最后由 CrLf 于 2017-1-7 15:42 编辑
  1. 1>1/* :
  2. @echo off
  3. set "from=Z:\源文件夹"
  4. set "to=Z:\备份文件夹"
  5. for /f "delims=" %%a in ('dir /s /a /b "%to%\*" ^| sort /+65535 ^| cscript -nologo -e:jscript "%~f0" "%to%"') do (
  6. for %%b in ("%to%\%%a") do (
  7. if %%~aza neq %%~azb (
  8. rd /s /q "%to%%%a" || del /f "%to%%%a"
  9. )
  10. )
  11. )
  12. xcopy /d /e /y /r /k /x /h /c "%from%" "%to%"
  13. pause & exit /b
  14. */
  15. var length=WSH.Arguments(0).length
  16. var output=
  17. WSH.StdIn.ReadAll().replace(
  18. new RegExp( '^.{'+length+'}', 'gm' ),
  19. ''
  20. )
  21. WSH.Echo(output)
复制代码

作者: 523066680    时间: 2017-1-7 15:28

4、不能用 copy、xcopy
5、不能用 if、for
作者: ygqiang    时间: 2017-1-7 15:36

回复 11# 523066680


    4、能用 copy、xcopy
5、能用 if、for
作者: ygqiang    时间: 2017-1-7 15:37

回复 10# CrLf


    你好,简单测试了下。

如果目标目录下,多了一个只读属性的文件,你的bat代码删除不了。谢谢
作者: CrLf    时间: 2017-1-7 15:42

已修改
作者: ygqiang    时间: 2017-1-7 16:01

本帖最后由 ygqiang 于 2017-1-9 10:32 编辑

回复 14# CrLf
  1. @echo off
  2. echo 源盘—》目标盘
  3. set biao1=D:\0驱动-软件\0-udisk\sd4g
  4. cls
  5. echo 保存文件执行路径
  6. pushd "%~dp0"
  7. cls
  8. for %%a in (E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  9. fsutil fsinfo volumeinfo %%a:\ | findstr "错误" >nul && echo %%a不可读取 || echo %%a可读取 && (
  10. if exist "%%a:\000-000\00-其他\start" (
  11. if exist "%biao1%\000-000" (
  12. echo 源盘:%%a:
  13. echo 目标盘:%biao1%
  14. ping 0 -n 6 >nul
  15. cls
  16. 10楼的代码放在这里。需要修改哪些地方?
  17. )
  18. )
  19. )
  20. )
  21. echo 恢复文件执行路径
  22. popd
  23. cls
复制代码
你的代码,应该如何修改下呢??
作者: capslock    时间: 2017-1-7 17:24

备份到 NAS 么? 这么多有差异/增量同步的网盘你不用
作者: ygqiang    时间: 2017-1-7 18:22

回复 16# capslock


    网盘\NAS都不考虑。
就是单纯的u盘、移动硬盘的数据,定期手动备份到本地硬盘上。
作者: capslock    时间: 2017-1-8 00:00

回复 17# ygqiang


    你说你是不是站长马甲吧
作者: CrLf    时间: 2017-1-8 00:16

回复 18# capslock


    我以 Batcher 和 HAT 之间的纯洁友谊保证,楼主绝对不是第三者
作者: yu2n    时间: 2017-1-8 16:22

本帖最后由 yu2n 于 2017-1-8 16:24 编辑

不用 robocopy ? 开倒车是挺刺激的,就怕哪天找不到备份档。

筒子们,安全第一。
作者: ygqiang    时间: 2017-1-8 20:00

回复 20# yu2n

用xp或者win7系统,自带的命令,备份资料。应该问题不大吧。
作者: GNU    时间: 2017-1-8 20:13

回复 21# ygqiang


    Win7应该是自带robocopy
作者: yu2n    时间: 2017-1-8 20:20

回复 21# ygqiang


    我就问你一句,你如果用计划任务自动备份,刚好有些文件正在使用中,你该怎样处理?

    如果使用 robocopy ,你可以选择略过,或者重试。重试次数/间隔时间都可以在参数中指定。

    另:Win7 以上的系统已内置  robocopy 命令,WinXp 直接拷贝一个 robocopy 也可使用。
作者: ygqiang    时间: 2017-1-8 21:08

回复 23# yu2n


    一般都是手动备份资料。
刚好有些文件正在使用中,这种情况很少遇到。
因为要经常在不同的全新xp系统下备份,robocopy,还是不太方便。
作者: ygqiang    时间: 2017-1-9 10:50

回复 10# CrLf


    15楼,帮忙修改下代码吧。谢谢
作者: ygqiang    时间: 2017-1-9 15:15

回复 10# CrLf


你的代码,win7系统测试正常。
xp系统测试出现问题。

提示:(16,1).。。。错误:输入超出了文件尾
目标文件系统下不支持安全信息。
文件创建错误-不支持请求




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