Board logo

标题: [文本处理] 批处理怎样对比两个文本并做出一些动作? [打印本页]

作者: yahui102    时间: 2019-5-19 04:33     标题: 批处理怎样对比两个文本并做出一些动作?

大佬们好,我是有这样的一个想法
两个文本,name.txt    和 lujing.txt.
想让luijng.txt文本检测到有name.txt里面的内容的那一行,的这个文件路径删除掉,也就是删掉"C:\xiaohei.jpg" 和"C:\xiaobai.jpg" 还有"C:\xiaohong.jpg"
请教这个批处理应该怎么写

name.txt内容为
xiaohong
xiaohei
xiaobai

lujing.txt内容为
"C:\333333.jpg"
"C:\xiaohei.jpg"
"C:\555555.jpg"
"C:\xiaobai.jpg"
"C:\666666.jpg"
"C:\xiaohong.jpg"
"C:\777777.jpg"
"C:\888888.jpg"
"C:\999999.jpg"
作者: zaqmlp    时间: 2019-5-19 05:36

是删除txt里面的行内容还是实际的路径文件?
作者: yahui102    时间: 2019-5-19 06:52

你好大佬,我是想删除实际路径的文件,我会用比较笨的办法把文件路径都复制到文本里面,然后对比文件名,有相同名的就删除掉那个文件
作者: yahui102    时间: 2019-5-19 06:55

如果可以实现的话,确定会被删掉的这些文件可以有个提示让看一眼吗,就是说继续操作的话,这几个文件会被删除,能知道一下是哪些即将被删掉了
作者: zaqmlp    时间: 2019-5-19 08:28

本帖最后由 zaqmlp 于 2019-5-19 08:37 编辑
  1. @echo off
  2. mode con lines=500
  3. set info=互助互利,支付宝扫码头像,感谢赞助
  4. rem 有问题,可加QQ956535081及时沟通
  5. title %info%
  6. cd /d "%~dp0"
  7. set "文本1=name.txt"
  8. set "文本2=lujing.txt"
  9. powershell -NoProfile -ExecutionPolicy bypass ^
  10.     $accurate=$true;$extension=$false;^
  11.     $t1=[IO.File]::ReadAllLines('%文本1%',[Text.Encoding]::Default);^
  12.     $t2=[IO.File]::ReadAllLines('%文本2%',[Text.Encoding]::Default);^
  13.     [System.Collections.ArrayList]$list=@();^
  14.     for($i=0;$i -lt $t1.Count;$i++){^
  15.         for($j=0;$j -lt $t2.Count;$j++){^
  16.             $line=$t2[$j].trim('\""');^
  17.             $arr=$line.split('\');$name='';^
  18.             if($extension){$name=$arr[-1];}else{$name=$arr[-1] -replace '\.[^^\.]*$','';};^
  19.             if($accurate){^
  20.                 if($t1[$i] -eq $name){[void]$list.add($line)};^
  21.             }else{^
  22.                 if($name.toLower().Contains($t1[$i].toLower())){[void]$list.add($line)};^
  23.             };^
  24.         };^
  25.     };^
  26.     $list;^
  27.     write-host '%info%' -ForegroundColor green;^
  28.     write-host \"`r`n>>按回车键执行删除<<\";^
  29.     [Console]::ReadKey()^|Out-Null;^
  30.     for($i=0;$i -lt $list.Count;$i++){^
  31.         if(test-path -liter $list[$i]){^
  32.             write-host ('--^>'+$list[$i]);^
  33.             del -liter $list[$i] -force;^
  34.         };^
  35.     }
  36. pause
复制代码

作者: Batcher    时间: 2019-5-19 18:08

  1. findstr /v /g:name.txt lujing.txt >结果.txt
复制代码

作者: Batcher    时间: 2019-5-19 18:08

  1. @echo off
  2. findstr /v /g:name.txt lujing.txt >lujing_new.txt
  3. move /y lujing_new.txt lujing.txt
复制代码

作者: miqilaosu    时间: 2019-5-20 11:06

新人刚学来水一个
cd /d %~dp0
echo off
for /f "delims=*" %%a in ('type "name.txt"') do (
        for /f "delims=*" %%i in ('type "lujing.txt"') do (
                if "%%~ni"=="%%a" (
                del %%i
                echo,%%i %time% %date%
                )
        )
        )>>lujing.log
start /b lujing.log
pause
作者: yahui102    时间: 2019-5-20 18:41

非常感谢大家,感谢管理员的指点,感谢zaqmlp,感谢miqilaosu,感谢Batcher,这里真像有家的感觉,好温暖,不愧是批处理之家。我会常常多看帖子多学习的




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