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

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

本帖最后由 xudaweb 于 2014-5-19 10:05 编辑
  1. TX13P,,,,,,,,A7,,,,,,,,,,,Serdes_Driver,,,,,,SIG,,,,,,,,,,,,,,,,----
  2. GND,,,,,,,,,,A8,,,,,,,,,,,----,,,,,,,,,,,,,,,GND,,,,,,,,,,,,,,,,----
  3. TDI,,,,,,,,,,A9,,,,,,,,,,,CMOS,,,,,,,,,,,,,,,TST,,,,,,,,,,,,,,,,1.8V
复制代码
想要把重复的多个逗号,替换成一个逗号,如何实现?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
学习...

  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

评分人数

TOP

  1. sed "s/,\+/,/g" a.txt > b.txt
复制代码
1

评分人数

TOP

  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

评分人数

    • xudaweb: 3q技术 + 1
    • CrLf: 感动中国。GetStandardStream(1)技术 + 1

TOP

本帖最后由 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

评分人数

TOP

回复 4# terse


    竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...

TOP

能简单解释一下这句么?为什么挑8,4,2,2作为判断准则?
  1. for %%b in (",,,,,,,," ",,,," ",," ",,") do set "str=!str:%%~b=,!"
复制代码
回复 2# CrLf
学习...

TOP

回复 7# xudaweb


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

评分人数

TOP

回复 7# xudaweb

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

评分人数

TOP

竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...

TOP

返回列表