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

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

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

比如有一个文件里面是这样
XXXX111
XXXX222
XXXX333
我想将它转成这样:
A111
A222
A333
真心求教!

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

TOP

俺是新手菜鸟,所以贴出俺的简陋代码,没有啥高深技术,但自己试验过了,可以达到楼主的要求。楼主试试吧。
  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
复制代码
http://www.bathome.net/s/tool/index.html

TOP

不好意思,没看清要求,为了增强通用性,请把第四行代码中的",3”去掉,看准哦,前面有个逗号。
http://www.bathome.net/s/tool/index.html

TOP

回复 4# xiaopo



你试试文件内容是这样的时候会如何:
XXXX!!!
XXXXon
XXXXoff

TOP

  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
复制代码
话说特殊字符。。。除了叹号。。。

TOP

要考虑特殊字符,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
复制代码

TOP

回复 7# apang


    敢问,这个位置为什么会影响感叹号的输出,能否详细介绍下?
http://www.bathome.net/s/tool/index.html

TOP

回复 8# xiaopo

如果在set "str=%%a"之前开启变量延迟,%%a所包含的感叹号会被当成变量引用符号而被脱掉。

TOP

回复 9# apang


    哦,原来是这样,多谢朋友,
http://www.bathome.net/s/tool/index.html

TOP

TOP

回复 11# gawk


    多谢,善于运用论坛的搜索功能,学习了。
http://www.bathome.net/s/tool/index.html

TOP

回复 7# apang

谢谢高手,又学了一招。

TOP

返回列表