Board logo

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

作者: 修修的想法    时间: 2018-8-21 03:14     标题: 批处理如何批量删除多个txt 相同内容包括子目录?

有上百个TXT 开头都有共同的内容 想批量删除
有什么好的快速的方法
作者: Batcher    时间: 2018-8-21 12:41

请举例说明
作者: xczxczxcz    时间: 2018-8-21 15:30

本帖最后由 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.   )
复制代码
程式未做优化。测试正常。
作者: xczxczxcz    时间: 2018-8-21 19:03

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




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