Board logo

标题: [文件操作] 批处理遍历两个文件夹获修改时间不一样的同名文件问题 [打印本页]

作者: miaomiao    时间: 2015-11-3 11:13     标题: 批处理遍历两个文件夹获修改时间不一样的同名文件问题

  1. @echo off&color f1
  2. set d1=F:\share
  3. set d2=D:\test
  4. set d3=D:\test2
  5. set d4=D:\test3
  6. cd/d "%d1%"
  7. for /f "delims=" %%i in ('dir/s/b/a ')do (
  8.   if not exist "%d2%\%%i" (copy "%%i" "%d4%")else (
  9.      for /f "delims=" %%j in ('dir/s/b/a "%d2%\%%i"')do (
  10.       if %%~ti NEQ %%~tj copy/y "%d2%\%%i" "%d3%"
  11. )
  12. ))
  13. pause
复制代码
if %%~ti NEQ %%~tj copy/y "%d2%\%%i" "%d3%"其中这一句好像没有执行到,这里有什么问题吗。求大神
作者: CrLf    时间: 2015-11-3 15:44

你忘了 %%i 的值都是完整路径,所以组合的 D:\test\F:\share 是非法路径

顺便改进下
  1. @echo off&color f1
  2. set d1=F:\share
  3. set d2=D:\test
  4. set d3=D:\test2
  5. set d4=D:\test3
  6. cd/d "%d1%"
  7. for /f "delims=" %%i in ('findstr /sm .*')do (
  8.   if not exist "%d2%\%%i" (copy "%%i" "%d4%")else (
  9.      for %%j in ("%d2%\%%i")do (
  10.       if %%~ti NEQ %%~tj copy/y "%d2%\%%i" "%d3%"
  11. )
  12. ))
  13. pause
复制代码

作者: miaomiao    时间: 2015-11-5 14:05

你忘了 %%i 的值都是完整路径,所以组合的 D:\test\F:\share 是非法路径

顺便改进下
CrLf 发表于 2015-11-3 15:44



    这样也不行啊- -点击好像没反应,这个问题困扰我好久
作者: miaomiao    时间: 2015-11-5 14:11

回复 2# CrLf


    巡查大人,其实我是是想实现这样的功能的,A文件夹中有文件也有文件夹(有文件),想把A文件夹每天备份至B文件夹,结构一样,然后每天增量备份。其实这个用xcopy就能轻松实现了,但是现在又要求说,在增量备份时有些文件可能被修改了,所以要在覆盖前,将B中的该文件先备份至C文件夹(结构保存一致),其实也就是实现了,不管怎么样,增量备份后,每一份修改过的文件都必须保持着更改前跟更改后。。。我是做.NET开发的,这个真的难倒我了,客户要求用bat写 :Q ,求助啊
作者: miaomiao    时间: 2015-11-5 15:18

回复 2# CrLf

现在实现了文件夹下同名文件修改过后的文件先保存到其他地方,但是文件夹下的文件夹的文件就出错。。。
  1. @echo off
  2. for /r d:\test %%i in (*) do (
  3. echo %%~nxi
  4.           for /r F:\share %%a in (*) do (echo %%~nxa
  5. if %%~nxi == %%~nxa  (
  6. (if %%~ta NEQ  %%~ti  (  copy %%i "D:\test2" /y/d )   )
  7. )
  8. )
  9. )
  10. pause
复制代码

作者: terse    时间: 2015-11-5 18:51

这样呢?
  1. @echo off&setlocal enabledelayedexpansion
  2. set d1=F:\share
  3. set d2=D:\test
  4. set d3=D:\test2
  5. set d4=D:\test3
  6. cd/d "%d1%"
  7. for /f "delims=" %%i in ('dir/s/b/a')do (
  8.     set "str=%%i"
  9.     if exist "%d2%!str:*%d1%=!" (
  10.           for /f "delims=" %%j in ("%d2%!str:*%d1%=!")do (
  11.               if "%%~ti" neq "%%~tj" copy/y "%d2%!str:*%d1%=!" "%d3%"
  12.           )
  13.     ) else copy "%%i" "%d4%"
  14. )
  15. pause
复制代码





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