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

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

[复制链接]
发表于 2021-11-8 15:44:00 | 显示全部楼层 |阅读模式
求助各位大佬,现有一个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.        
  8.         >>"a.txt" echo,!str!
  9. )
  10. 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
如何才能将原来的文本覆盖掉,并去除前面的行号,实现要求,求助各位大佬,感谢!!!
 楼主| 发表于 2021-11-8 16:08:12 | 显示全部楼层
有木有大佬,帮小弟看下
发表于 2021-11-8 16:22:38 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2021-11-8 16:30:12 | 显示全部楼层
回复 3# qixiaobin0715


    感谢大佬,我执行完,前面的空行依然不存在,有没有保留空行的方法
发表于 2021-11-8 16:34:43 | 显示全部楼层
回复 4# coliooo
代码已修改。
 楼主| 发表于 2021-11-8 18:29:56 | 显示全部楼层
回复 5# qixiaobin0715


    感谢大佬 谢谢你
 楼主| 发表于 2021-11-8 20:26:01 | 显示全部楼层
回复 3# qixiaobin0715


    后面的  !str:*:=!  这个是什么意思,大佬可以解释下吗,这边没懂
发表于 2021-11-8 20:31:02 | 显示全部楼层
删除变量str第一个冒号及其前面的所有字符。

评分

参与人数 1技术 +1 收起 理由
coliooo + 1 快速解答关键问题

查看全部评分

发表于 2023-7-27 18:06:44 | 显示全部楼层
回复 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"
复制代码
发表于 2023-7-28 08:42:00 | 显示全部楼层
回复 9# Batcher
谢谢分享!!!
发表于 2023-7-28 09:31:32 | 显示全部楼层
回复 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
复制代码
发表于 2023-7-28 09:37:48 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 15:38 , Processed in 0.021947 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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