Board logo

标题: [文本处理] 批处理TXT对比 覆盖 [打印本页]

作者: maxwell    时间: 2018-11-19 17:30     标题: 批处理TXT对比 覆盖

本帖最后由 maxwell 于 2018-11-20 09:33 编辑

当前存在两个同文件名.txt (假设为temp.txt)分别在 AA文件夹  另一个在BB 文件夹。

现在由于可能出现AA文件夹下的temp.txt 会和BB文件夹下的temp.txt内容出现差异:
那么需要的操作为:

1、当AA文件夹下的temp.txt有的数据 而BB 文件夹下temp.txt没有的数据就 拷贝过去
2、当AA文件夹下的temp.txt没有的数据,如果B 文件夹下的temp.txt中有 ,就不做操作。


上述有误: 重新描述下

当前存在两个同名.7z压缩包 (假设为temp.7z  压缩包内为同名temp.txt) 分别在 AA文件夹  另一个在BB 文件夹。

现在由于可能出现AA文件夹下的temp.7z内的temp.txt 会和BB文件夹下的temp.7z内的temp.txt内容出现差异:
那么需要的操作为:

1、当AA文件夹下的temp.7z中的temp.txt有的数据 而BB 文件夹下的temp.7z中的temp.txt没有的数据就 拷贝过去
2、当AA文件夹下的temp.7z中的temp.txt没有的数据,如果BB 文件夹下的temp.7z中的temp.txt中有 ,就不做操作。
3、当AA文件夹下无temp.7z 压缩包。则不进行任何操作

作者: yhcfsr    时间: 2018-11-19 18:03

本帖最后由 yhcfsr 于 2018-11-19 18:08 编辑

简化为一句:AA,BB中的同名文件,如果BB中该文件大小为0,复制AA中同名文件到BB.
下面的脚本有个缺陷,如果AA中存在子目录,则子目录与BB中的同名文件不会处理.
  1. set "AA=D:\TEST\a"
  2. set "BB=D:\TEST\b"
  3. for /r "%BB%" %%a in (*) do if %%~za==0 (
  4.     if exist "%AA%\%%~nxa" copy "%AA%\%%~nxa" "%%a" /y
  5. )
复制代码

作者: Batcher    时间: 2018-11-19 21:08

回复 2# yhcfsr


    猜测楼主是要逐行比较文件内容,而不是文件是否为空。
作者: Batcher    时间: 2018-11-19 21:14

  1. @echo off
  2. findstr /v /x /g:BB\temp.txt AA\temp.txt > temp.tmp
  3. type temp.tmp >> BB\temp.txt
复制代码

作者: maxwell    时间: 2018-11-20 09:26

回复 4# Batcher


    对的 朋友 我是需要逐行对比,还有一点我忘记说明了; 这个temp.txt 实际是被压缩到同名压缩包中的,格式为.7z

即需要注意的是:

1、当AA文件夹下的temp.7z中的temp.txt有的数据 而BB 文件夹下的temp.7z中的temp.txt没有的数据就 拷贝过去
2、当AA文件夹下的temp.7z中的temp.txt没有的数据,如果B 文件夹下的temp.7z中的temp.txt中有 ,就不做操作。
3、当AA文件夹下无temp.7z 压缩包。则不进行任何操作。
作者: maxwell    时间: 2018-11-20 09:34

回复 2# yhcfsr


    朋友,不是比对是否为空
作者: Batcher    时间: 2018-11-20 13:12

回复 5# maxwell


temp.7z中除了temp.txt还有其它文件吗?

还有需要明确一下拷贝什么东西过去:
把AA文件夹下的temp.7z拷贝到BB文件夹下?
把AA文件夹下的temp.7z的temp.txt拷贝到BB文件夹下?




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