标题: [文件操作] 单纯的批处理本身,能否实现单向备份同步? [打印本页]
作者: 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/* :
- @echo off
-
- set "from=Z:\源文件夹"
- set "to=Z:\备份文件夹"
-
- for /f "delims=" %%a in ('dir /s /a /b "%to%\*" ^| sort /+65535 ^| cscript -nologo -e:jscript "%~f0" "%to%"') do (
- for %%b in ("%to%\%%a") do (
- if %%~aza neq %%~azb (
- rd /s /q "%to%%%a" || del /f "%to%%%a"
- )
- )
- )
-
- xcopy /d /e /y /r /k /x /h /c "%from%" "%to%"
-
- pause & exit /b
-
- */
-
- var length=WSH.Arguments(0).length
- var output=
- WSH.StdIn.ReadAll().replace(
- new RegExp( '^.{'+length+'}', 'gm' ),
- ''
- )
-
- 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 - @echo off
- echo 源盘—》目标盘
-
- set biao1=D:\0驱动-软件\0-udisk\sd4g
-
-
- cls
-
- echo 保存文件执行路径
- pushd "%~dp0"
- cls
-
- 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 (
- fsutil fsinfo volumeinfo %%a:\ | findstr "错误" >nul && echo %%a不可读取 || echo %%a可读取 && (
-
-
- if exist "%%a:\000-000\00-其他\start" (
- if exist "%biao1%\000-000" (
-
- echo 源盘:%%a:
- echo 目标盘:%biao1%
- ping 0 -n 6 >nul
- cls
-
- 10楼的代码放在这里。需要修改哪些地方?
- )
- )
-
-
- )
- )
-
- echo 恢复文件执行路径
- popd
- 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 |