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

[文本处理] [已解决]批处理如何替换重复的字符

[复制链接]
发表于 2014-5-7 16:49:19 | 显示全部楼层 |阅读模式
本帖最后由 xudaweb 于 2014-5-19 10:05 编辑
  1. TX13P,,,,,,,,A7,,,,,,,,,,,Serdes_Driver,,,,,,SIG,,,,,,,,,,,,,,,,----
  2. GND,,,,,,,,,,A8,,,,,,,,,,,----,,,,,,,,,,,,,,,GND,,,,,,,,,,,,,,,,----
  3. TDI,,,,,,,,,,A9,,,,,,,,,,,CMOS,,,,,,,,,,,,,,,TST,,,,,,,,,,,,,,,,1.8V
复制代码
想要把重复的多个逗号,替换成一个逗号,如何实现?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-5-7 17:42:38 | 显示全部楼层
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.    set str=%%a
  4.    setlocal enabledelayedexpansion
  5.    for %%b in (",,,,,,,," ",,,," ",," ",,") do set "str=!str:%%~b=,!"
  6.    echo !str!
  7.    endlocal
  8. ))>b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 3Q

查看全部评分

发表于 2014-5-9 08:29:50 | 显示全部楼层
  1. sed "s/,\+/,/g" a.txt > b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 3q

查看全部评分

发表于 2014-5-9 13:59:21 | 显示全部楼层
  1. @ECHO OFF
  2. (mshta "javascript:with(new ActiveXObject('Scripting.FileSystemObject')){GetStandardStream(1).Write(GetStandardStream(0).readall().replace(/(\,)+/g,'$1'));close()}"|more)<a.txt>b2.txt
  3. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
xudaweb + 1 3q
CrLf + 1 感动中国。GetStandardStream(1)

查看全部评分

发表于 2014-5-9 16:50:53 | 显示全部楼层
本帖最后由 hu_contact 于 2014-5-9 16:52 编辑

我搞的太复杂了。。。不过更深体会到了变量延迟的内容
  1. @echo off
  2. echo 【提示】代码用“畱”作为段落标识符,如果文中有该字,应改为文中没有的符号!
  3. for /f %%w in (test.txt) do call set all=%%all%%畱%%w
  4. :continue
  5. for /f "delims=畱 tokens=1,*" %%p in ("%all%") do (
  6.         set line=%%p
  7.         set all=%%q
  8. )
  9. if "%line%"=="" (call :over) else (call :lineDispose)

  10. :lineDispose
  11. :continueDispose
  12. for /f "delims=, tokens=1,*" %%i in ("%line%") do (
  13.         call set newLine=%%newLine%%,%%i
  14.         set line=%%j
  15. )
  16. if "%line%"=="" (echo %newLine:~1%&set newLine=&goto continue) else (goto continueDispose)
  17. pause>nul

  18. :over
  19. echo 工作已经完成,按任意键退出。&pause>nul&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 3q

查看全部评分

发表于 2014-5-9 17:30:55 | 显示全部楼层
回复 4# terse


    竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...
 楼主| 发表于 2014-5-12 14:11:41 | 显示全部楼层
能简单解释一下这句么?为什么挑8,4,2,2作为判断准则?
  1. for %%b in (",,,,,,,," ",,,," ",," ",,") do set "str=!str:%%~b=,!"
复制代码
回复 2# CrLf
发表于 2014-5-12 16:59:59 | 显示全部楼层
回复 7# xudaweb


    二分法,大致思路是每次将 , 的数量减半。最后如果出现 ,,, 被替换成 ,, 的情况,用 set "str=!str:,,=,!" 可以再将其替换为 ,

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 感谢!

查看全部评分

发表于 2014-5-12 17:41:16 | 显示全部楼层
回复 7# xudaweb

假设文本里含连续62个 ","
第一次循环每8个替换成一个 "," 替换后为13个连续 ","
第二次循环每4个替换成一个 "," 替换后为4个连续 ","
第三次循环每2个替换成一个 "," 替换后为2个连续 ","
第四次循环每2个替换成一个 "," 最终为1个  ","

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 感谢~

查看全部评分

发表于 2014-5-13 21:18:05 | 显示全部楼层
竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 05:34 , Processed in 0.034256 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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