标题: [文本处理] 批处理如何批量删除多个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 编辑
如果楼主的所有文档的开头内容相同部分字符相同。行数也相同。那下面的程式可以正确运行。若有部分文档相同部分的行数的不同, 则不要运行下面的程式。那样的话感觉就要对所有的文档检查最小重复行数了。若能把重复的内容取出来单独做个文件就会方便很多。不知偶理解的正不正确。
转了点弯 只删除开头相同部分。其余相同不删。
把文件夹拖上来。- @echo off & setlocal EnableDelayedExpansion
- pushd "%~dp0"
-
- call :SAME_STRING "%1"
- del /q *.tmp
- for /f "delims=" %%a in ('dir/a-d/b/s "%~1\*.txt"') do (
- pushd "%%~dpa"
- if %n% geq 1 (
- (for /f "skip=%n% delims=" %%e in ('type "%%~nxa"') do echo %%e)>new.log
- if /i not exist "%%~nxa.bak" ren "%%~nxa" "%%~nxa.bak"
- rem 如不想备份 把上句改为 del /q "%%~nxa"
- ren new.log "%%~nxa") else echo 开头没有发现重复的行
- popd
- )
- popd
- pause & exit
-
- :SAME_STRING
- for /f "delims=" %%a in ('dir/a-d/b/s "%1\*.txt"') do (
- set /a n+=1
- copy /y "%%~fa" !n!.tmp>nul 2>nul
- if !n! gtr 1 (
- set /a n=0
- for /f "delims=" %%a in ('type 1.tmp') do findstr /ix /c:"%%a" 2.tmp>nul 2>nul && set /a n+=1||goto :eof
- goto :eof)
- )
复制代码
程式未做优化。测试正常。
作者: xczxczxcz 时间: 2018-8-21 19:03
其实楼主这个感觉:既然有共同的内容。那应该也是共同的行数。这样可以在for 中 直接skip 行数 不是很方便吗?无需发出来啊。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |