Board logo

标题: [文件操作] 批处理如何保留空行空格的基础上,前面去除掉行号,同时对字符串进行替换 [打印本页]

作者: coliooo    时间: 2021-11-8 15:44     标题: 批处理如何保留空行空格的基础上,前面去除掉行号,同时对字符串进行替换

求助各位大佬,现有一个a.txt文本,其中的内容为:




        0051ABC 0051XYZ


                                0051ABC 0051XYZ
                0051ABC 0051XYZ
                        0051ABC 0051XYZ

其中前面有4个空行,现在有个问题,要将文本中的"ABC"换成“123”,“XYZ”换成“AFK”,然后要跟原来的文本一样,空格跟空行依然保留

这边是我写的bat文件
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%b in ('findstr /n .* a.txt') do (
  4. set "str=%%b"
  5. set "str=!str:ABC=123!"
  6. set "str=!str:XYZ=AFK!"
  7. >>"a.txt" echo,!str!
  8. )
  9. pause
复制代码
我这边执行完bat文本是这样的




        0051ABC 0051XYZ


                                0051ABC 0051XYZ
                0051ABC 0051XYZ
                        0051ABC 0051XYZ1:
2:
3:
4:
5:        0051123 0051AFK
6:
7:
8:                                0051123 0051AFK
9:                0051123 0051AFK
10:                        0051123 0051AFK
如何才能将原来的文本覆盖掉,并去除前面的行号,实现要求,求助各位大佬,感谢!!!
作者: coliooo    时间: 2021-11-8 16:08

有木有大佬,帮小弟看下
作者: qixiaobin0715    时间: 2021-11-8 16:22

本帖最后由 qixiaobin0715 于 2021-11-8 16:33 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in ('findstr /n .* a.txt') do (
  4. set "str=%%a"
  5. set "str=!str:ABC=123!"
  6. set "str=!str:XYZ=AFK!"
  7. echo,!str:*:=!
  8. ))>New.txt
  9. pause
复制代码

作者: coliooo    时间: 2021-11-8 16:30

回复 3# qixiaobin0715


    感谢大佬,我执行完,前面的空行依然不存在,有没有保留空行的方法
作者: qixiaobin0715    时间: 2021-11-8 16:34

回复 4# coliooo
代码已修改。
作者: coliooo    时间: 2021-11-8 18:29

回复 5# qixiaobin0715


    感谢大佬 谢谢你
作者: coliooo    时间: 2021-11-8 20:26

回复 3# qixiaobin0715


    后面的  !str:*:=!  这个是什么意思,大佬可以解释下吗,这边没懂
作者: qixiaobin0715    时间: 2021-11-8 20:31

删除变量str第一个冒号及其前面的所有字符。
作者: Batcher    时间: 2023-7-27 18:06

回复 3# qixiaobin0715


保留空行和保留英文感叹号-方法1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "1.txt"') do (
  4.     set "str=%%b"
  5.     setlocal enabledelayedexpansion
  6.     if "%%b" neq "" (
  7.         set "str=!str:ABC=123!"
  8.         set "str=!str:XYZ=AFK!"
  9.     )
  10.     echo,!str!
  11.     endlocal
  12. ))>"2.txt"
复制代码
保留空行和保留英文感叹号-方法2.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "delims=" %%a in ('findstr /n .* "1.txt"') do (
  4.     set "str=%%a"
  5.     setlocal enabledelayedexpansion
  6.     set "str=!str:ABC=123!"
  7.     set "str=!str:XYZ=AFK!"
  8.     echo,!str:*:=!
  9.     endlocal
  10. ))>"2.txt"
复制代码

作者: qixiaobin0715    时间: 2023-7-28 08:42

回复 9# Batcher
谢谢分享!!!
作者: hfxiang    时间: 2023-7-28 09:31

回复 1# coliooo

将文件以ANSI编码保存为1.txt,可用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )实现:
  1. gawk "{gsub(/ABC/,\"123\");gsub(/XYZ/,\"AFK\")}1" 1.txt>2.txt
复制代码

作者: hfxiang    时间: 2023-7-28 09:37

回复 1# coliooo

将文件以 ANSI 编码保存为 1.txt, 可用第 3 方工具 sed( http://bcn.bathome.net/tool/4.8/sed.exe )实现写回原文件:
  1. sed -i "s/ABC/123/;s/XYZ/AFK/" 1.txt
复制代码





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