[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

本帖最后由 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目录下,如果有多余的文件、文件夹。也能自动删除。

TOP

初次备份,删b为空
或者for b下所有文件,a中不存在同名文件就删除b下的。
目的,学习批处理

TOP

你希望如何判断“完全相同的文件”?
文件名、大小、修改时间等不靠谱,需要计算文件的MD5来判断吗?

TOP

回复 3# hlzj88


    应该不会这么简单。同名的文件,内容可能完全不同。

TOP

回复 3# hlzj88

回复 5# GNU


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

如果用单纯的批处理,实现起来是否容易?

TOP

回复 4# GNU


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

判断标准只要实现:B文件夹内容,与A文件夹完全一样就行。

TOP

回复 7# ygqiang


    根据什么来判断“完全一样”?文件名、大小、修改时间等不靠谱,需要计算文件的MD5来判断吗?

TOP

回复 8# GNU

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

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

TOP

本帖最后由 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)
复制代码

TOP

4、不能用 copy、xcopy
5、不能用 if、for

TOP

回复 11# 523066680


    4、能用 copy、xcopy
5、能用 if、for

TOP

回复 10# CrLf


    你好,简单测试了下。

如果目标目录下,多了一个只读属性的文件,你的bat代码删除不了。谢谢

TOP

已修改

TOP

本帖最后由 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
复制代码
你的代码,应该如何修改下呢??

TOP

返回列表