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

[文本处理] 【已解决】求助!批处理删除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

  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/b *.txt') do (
  3. (for /f "delims=" %%b in ('type "%%a"') do (
  4. set "str=%%b"&setlocal enabledelayedexpansion
  5. echo;!str::=!&endlocal
  6. ))>"out.log"
  7. move /y "out.log" "%%a"
  8. )
复制代码
1

评分人数

TOP

回复 2# yhcfsr
谢谢大神,完美的解决了问题

TOP

回复 2# yhcfsr

150000行的话貌似不行

TOP

回复 4# tigerpower


    什么问题?
   批处理本身不擅长文本,像你这样长的文件,即使能处理,耗时定然很长了。

TOP

本帖最后由 tigerpower 于 2018-4-18 21:50 编辑

楼主说”最多不超过150000行“。

用Windows自带的”记事本“替换,
15万行不超过3秒,150万行不超过10秒,
加上打开记事本、保存等操作保守估计总时间不会超过60秒。

写二楼的这段批处理代码应超过60秒,
15万行运行超过600秒(6000秒?)
批处理太慢了,不太实用。

TOP

本帖最后由 yhcfsr 于 2018-4-18 21:53 编辑

回复 6# tigerpower


楼上说得有理。逐行处理文本的方式,对于长文本的确不合适。
因此我尝试POWERSHELL,做了个71W行的文本(26M),用powershell处理了也花68S,而用记事本打开,替换,保存也就10多秒的事。
15W行,8.8秒处理完成。
以下是测试代码:
  1. cls;
  2. $file=$null;
  3. $time=get-date
  4. $file=Get-Content "d:\test\out.txt";
  5. $file=($file -replace ':','');
  6. out-file "d:\test\out.txt" -InputObject $file;
  7. ((get-date)-$time).TotalSeconds
复制代码

TOP

回复 6# tigerpower


    也许楼主每天需要处理100个这样的文件呢
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. #*第三方http://www.bathome.net/s/tool/index.html?key=gawk
  2. #*&cls&2>nul md "result\" &dir /a-d/b *.txt|gawk -f "%~f0"&pause&exit
  3. BEGIN{
  4.     while(getline file>0){
  5.         while(getline<file>0){
  6.             gsub(/:/,"");
  7.             print>"result\\"file;
  8.         }
  9.     }
  10. }
复制代码

TOP

回复 9# pcl_test

代码执行后,就新建了一个result文件夹。

TOP

返回列表