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

[文本处理] 批处理如何批量删除多个txt 相同内容包括子目录?

有上百个TXT 开头都有共同的内容 想批量删除
有什么好的快速的方法

其实楼主这个感觉:既然有共同的内容。那应该也是共同的行数。这样可以在for 中 直接skip 行数 不是很方便吗?无需发出来啊。

TOP

本帖最后由 xczxczxcz 于 2018-8-21 18:56 编辑

如果楼主的所有文档的开头内容相同部分字符相同。行数也相同。那下面的程式可以正确运行。若有部分文档相同部分的行数的不同, 则不要运行下面的程式。那样的话感觉就要对所有的文档检查最小重复行数了。若能把重复的内容取出来单独做个文件就会方便很多。不知偶理解的正不正确。


转了点弯  只删除开头相同部分。其余相同不删。
把文件夹拖上来。
  1. @echo off & setlocal EnableDelayedExpansion
  2. pushd "%~dp0"
  3. call :SAME_STRING "%1"
  4. del /q *.tmp
  5. for /f "delims=" %%a in ('dir/a-d/b/s "%~1\*.txt"') do (
  6.     pushd "%%~dpa"
  7.     if %n% geq 1 (
  8.     (for /f "skip=%n% delims=" %%e in ('type "%%~nxa"') do echo %%e)>new.log
  9.     if /i not exist "%%~nxa.bak" ren "%%~nxa" "%%~nxa.bak"
  10.     rem 如不想备份 把上句改为 del /q "%%~nxa"
  11.     ren new.log "%%~nxa") else echo 开头没有发现重复的行
  12.    popd
  13.    )
  14. popd
  15. pause & exit
  16. :SAME_STRING
  17. for /f "delims=" %%a in ('dir/a-d/b/s "%1\*.txt"') do (
  18.   set /a n+=1
  19.   copy /y "%%~fa" !n!.tmp>nul 2>nul
  20.   if !n! gtr 1 (
  21.     set /a n=0
  22.     for /f "delims=" %%a in ('type 1.tmp') do findstr /ix /c:"%%a" 2.tmp>nul 2>nul && set /a n+=1||goto :eof
  23.     goto :eof)
  24.   )
复制代码
程式未做优化。测试正常。

TOP

请举例说明
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表