标题: [文本处理] 【已解决】求助!批处理删除TXT文档中的所有指定字符 [打印本页]
作者: f0229f0229 时间: 2018-4-17 17:37 标题: 【已解决】求助!批处理删除TXT文档中的所有指定字符
本帖最后由 f0229f0229 于 2018-4-17 19:58 编辑
请大神帮忙,批处理删除TXT文档中的所有“:”号,就在当前文本文档内删除,不产生新文件,如果包含文本文档的文件夹里还有其它子文件夹,则只处理当前的文本文档,不再自动打开其它子文件夹。
示例:
原文本文档内容(行数不定,最多不超过150000行)
2:0:0:0:0:0:0:0:0:0:0:0:0:1:0:0:2:1
2:0:0:0:0:0:0:0:0:0:0:0:0:1:0:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:1:0:0:2:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:0:2:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:2:0
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
2:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1
批处理后的内容(这是用的替换命令达到的)
200000000000010021
200000000000010111
200000000000010021
200000000000001111
200000000000001111
200000000000001111
200000000000001021
200000000000001111
200000000000001111
200000000000001120
200000000000001111
200000000000001111
找了一个批处理,但是没有效果,不知何原因,还请大神给指点,谢谢
@echo off
for /f "delims=: tokens=1-18" %%a in ('dir/b *.txt') do (
echo %%a%%b%%c%%d
)
pause
作者: yhcfsr 时间: 2018-4-17 18:03
- @echo off
- for /f "delims=" %%a in ('dir /a-d/b *.txt') do (
- (for /f "delims=" %%b in ('type "%%a"') do (
- set "str=%%b"&setlocal enabledelayedexpansion
- echo;!str::=!&endlocal
- ))>"out.log"
- move /y "out.log" "%%a"
- )
复制代码
作者: f0229f0229 时间: 2018-4-17 19:55
回复 2# yhcfsr
谢谢大神,完美的解决了问题
作者: tigerpower 时间: 2018-4-18 18:36
回复 2# yhcfsr
150000行的话貌似不行
作者: yhcfsr 时间: 2018-4-18 18:58
回复 4# tigerpower
什么问题?
批处理本身不擅长文本,像你这样长的文件,即使能处理,耗时定然很长了。
作者: tigerpower 时间: 2018-4-18 20:23
本帖最后由 tigerpower 于 2018-4-18 21:50 编辑
楼主说”最多不超过150000行“。
用Windows自带的”记事本“替换,
15万行不超过3秒,150万行不超过10秒,
加上打开记事本、保存等操作保守估计总时间不会超过60秒。
写二楼的这段批处理代码应超过60秒,
15万行运行超过600秒(6000秒?)
批处理太慢了,不太实用。
作者: yhcfsr 时间: 2018-4-18 21:49
本帖最后由 yhcfsr 于 2018-4-18 21:53 编辑
回复 6# tigerpower
楼上说得有理。逐行处理文本的方式,对于长文本的确不合适。
因此我尝试POWERSHELL,做了个71W行的文本(26M),用powershell处理了也花68S,而用记事本打开,替换,保存也就10多秒的事。
15W行,8.8秒处理完成。
以下是测试代码:- cls;
- $file=$null;
- $time=get-date
- $file=Get-Content "d:\test\out.txt";
- $file=($file -replace ':','');
- out-file "d:\test\out.txt" -InputObject $file;
- ((get-date)-$time).TotalSeconds
复制代码
作者: Batcher 时间: 2018-4-19 11:16
回复 6# tigerpower
也许楼主每天需要处理100个这样的文件呢
作者: pcl_test 时间: 2018-4-19 12:17
- #*第三方http://www.bathome.net/s/tool/index.html?key=gawk
- #*&cls&2>nul md "result\" &dir /a-d/b *.txt|gawk -f "%~f0"&pause&exit
- BEGIN{
- while(getline file>0){
- while(getline<file>0){
- gsub(/:/,"");
- print>"result\\"file;
- }
- }
- }
复制代码
作者: tigerpower 时间: 2018-4-20 05:55
回复 9# pcl_test
代码执行后,就新建了一个result文件夹。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |