找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27734|回复: 9

[文本处理] 【已解决】求助!批处理删除TXT文档中的所有指定字符

[复制链接]
发表于 2018-4-17 17:37:43 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2018-4-17 18:03:53 | 显示全部楼层
  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技术 +1 收起 理由
f0229f0229 + 1 乐于助人

查看全部评分

 楼主| 发表于 2018-4-17 19:55:51 | 显示全部楼层
回复 2# yhcfsr
谢谢大神,完美的解决了问题
发表于 2018-4-18 18:36:18 | 显示全部楼层
回复 2# yhcfsr

150000行的话貌似不行
发表于 2018-4-18 18:58:05 | 显示全部楼层
回复 4# tigerpower


    什么问题?
   批处理本身不擅长文本,像你这样长的文件,即使能处理,耗时定然很长了。
发表于 2018-4-18 20:23:31 | 显示全部楼层
本帖最后由 tigerpower 于 2018-4-18 21:50 编辑

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

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

写二楼的这段批处理代码应超过60秒,
15万行运行超过600秒(6000秒?)
批处理太慢了,不太实用。
发表于 2018-4-18 21:49:52 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2018-4-19 11:16:07 | 显示全部楼层
回复 6# tigerpower


    也许楼主每天需要处理100个这样的文件呢
发表于 2018-4-19 12:17:56 | 显示全部楼层
  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. }
复制代码
发表于 2018-4-20 05:55:09 | 显示全部楼层
回复 9# pcl_test

代码执行后,就新建了一个result文件夹。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:20 , Processed in 0.021078 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表