Board logo

标题: [文本处理] 批处理如何将txt文件每行开头前4个字符替换成指定字符? [打印本页]

作者: 星空    时间: 2012-4-21 21:32     标题: 批处理如何将txt文件每行开头前4个字符替换成指定字符?

本帖最后由 pcl_test 于 2016-10-10 12:43 编辑

比如有一个文件里面是这样
XXXX111
XXXX222
XXXX333
我想将它转成这样:
A111
A222
A333
真心求教!
作者: gawk    时间: 2012-4-21 22:17

  1. sed "s/^..../A/" a.txt >b.txt
复制代码

作者: xiaopo    时间: 2012-4-21 22:43

俺是新手菜鸟,所以贴出俺的简陋代码,没有啥高深技术,但自己试验过了,可以达到楼主的要求。楼主试试吧。
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f %%i in (a.txt) do (
  3.   set a=%%i
  4.   echo A!a:~4,3!>>b.txt
  5. )
  6. pause>nul
复制代码

作者: xiaopo    时间: 2012-4-21 22:46

不好意思,没看清要求,为了增强通用性,请把第四行代码中的",3”去掉,看准哦,前面有个逗号。
作者: gawk    时间: 2012-4-22 00:33

回复 4# xiaopo



你试试文件内容是这样的时候会如何:
XXXX!!!
XXXXon
XXXXoff
作者: canyuexiaolang    时间: 2012-4-22 08:35

  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "tokens=* delims=" %%i in (a.txt) do (
  3.     set "n=%%i"
  4.     call set "n=%%n:!n:~0,4!=A%%"
  5.     echo.!n!
  6. )pause>null
复制代码
话说特殊字符。。。除了叹号。。。
作者: apang    时间: 2012-4-22 18:53

要考虑特殊字符,setlocal enabledelayedexpansion貌似不能放在开头
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.   set "str=%%a"
  4.   setlocal enabledelayedexpansion
  5.   echo A!str:~4!
  6.   endlocal
  7. ))>b.txt
复制代码

作者: xiaopo    时间: 2012-4-22 19:30

回复 7# apang


    敢问,这个位置为什么会影响感叹号的输出,能否详细介绍下?
作者: apang    时间: 2012-4-22 21:47

回复 8# xiaopo

如果在set "str=%%a"之前开启变量延迟,%%a所包含的感叹号会被当成变量引用符号而被脱掉。
作者: xiaopo    时间: 2012-4-22 22:06

回复 9# apang


    哦,原来是这样,多谢朋友,
作者: gawk    时间: 2012-4-22 22:49

回复 8# xiaopo


http://www.bathome.net/thread-1224-1-1.html
作者: xiaopo    时间: 2012-4-23 18:27

回复 11# gawk


    多谢,善于运用论坛的搜索功能,学习了。
作者: yzlsc    时间: 2012-4-24 10:39

回复 7# apang

谢谢高手,又学了一招。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2