找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26780|回复: 8

[文本处理] 批处理怎样对比两个文本并做出一些动作?

[复制链接]
发表于 2019-5-19 04:33:42 | 显示全部楼层 |阅读模式
大佬们好,我是有这样的一个想法
两个文本,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"
发表于 2019-5-19 05:36:54 | 显示全部楼层
是删除txt里面的行内容还是实际的路径文件?
 楼主| 发表于 2019-5-19 06:52:17 | 显示全部楼层
你好大佬,我是想删除实际路径的文件,我会用比较笨的办法把文件路径都复制到文本里面,然后对比文件名,有相同名的就删除掉那个文件
 楼主| 发表于 2019-5-19 06:55:59 | 显示全部楼层
如果可以实现的话,确定会被删掉的这些文件可以有个提示让看一眼吗,就是说继续操作的话,这几个文件会被删除,能知道一下是哪些即将被删掉了
发表于 2019-5-19 08:28:30 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2019-5-19 18:08:32 | 显示全部楼层
  1. findstr /v /g:name.txt lujing.txt >结果.txt
复制代码
发表于 2019-5-19 18:08:46 | 显示全部楼层
  1. @echo off
  2. findstr /v /g:name.txt lujing.txt >lujing_new.txt
  3. move /y lujing_new.txt lujing.txt
复制代码
发表于 2019-5-20 11:06:56 | 显示全部楼层
新人刚学来水一个
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
 楼主| 发表于 2019-5-20 18:41:56 | 显示全部楼层
非常感谢大家,感谢管理员的指点,感谢zaqmlp,感谢miqilaosu,感谢Batcher,这里真像有家的感觉,好温暖,不愧是批处理之家。我会常常多看帖子多学习的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:21 , Processed in 0.020065 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表