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

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

求助各位大佬,现有一个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
如何才能将原来的文本覆盖掉,并去除前面的行号,实现要求,求助各位大佬,感谢!!!

有木有大佬,帮小弟看下

TOP

本帖最后由 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
复制代码

TOP

回复 3# qixiaobin0715


    感谢大佬,我执行完,前面的空行依然不存在,有没有保留空行的方法

TOP

回复 4# coliooo
代码已修改。

TOP

回复 5# qixiaobin0715


    感谢大佬 谢谢你

TOP

回复 3# qixiaobin0715


    后面的  !str:*:=!  这个是什么意思,大佬可以解释下吗,这边没懂

TOP

删除变量str第一个冒号及其前面的所有字符。
1

评分人数

    • coliooo: 快速解答关键问题技术 + 1

TOP

回复 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"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher
谢谢分享!!!

TOP

回复 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
复制代码

TOP

回复 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
复制代码

TOP

返回列表