Board logo

标题: [文本处理] 【已解决】求bat:替换含 wall 行内容(最好纯批处理,第三方也行)。谢谢 [打印本页]

作者: yyz219    时间: 2023-11-24 11:23     标题: 【已解决】求bat:替换含 wall 行内容(最好纯批处理,第三方也行)。谢谢

本帖最后由 yyz219 于 2023-11-25 12:31 编辑

完美解决了
方法1
@echo off
set /p var=<1.txt
(for /f "tokens=1*" %%i in (a.txt) do (
    if /i not "%%i"=="wall" (
    if "%%j"=="" (echo,%%i) else (echo,%%i %%j)) else (echo,%%i %var%)))>temp
move /y "temp" "a.txt"

方法2
@echo off
set "OldFile=a.txt"
set "NewFile=%OldFile%.tmp"
set "InputFile=1.txt"
cd /d "%~dp0"
set /p NewStr=<"%InputFile%"
(for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%OldFile%"') do (
    if "%%b" == "" (
        echo,
    ) else (
        set "OldStr=%%b"
        setlocal enabledelayedexpansion
        if not "!OldStr:wall =!" == "!OldStr!" (
            echo wall !NewStr!
        ) else (
            echo,!OldStr!
        )
        endlocal
    )
))>"%NewFile%"
move /y "%NewFile%" "%OldFile%" >nul

********************************************************************************************************************************
原来的问题:
需要替换的文本 a.txt(其中: D:\PE整理碎片(很好)\修改PE\程序\!墙纸\灰色.jpg——不是固定的):
... ...
//【3.设置墙纸】
wall D:\PE整理碎片(很好)\修改PE\程序\!墙纸\灰色.jpg
*********************************************************
处理以后需要的结果是:
... ...
//【3.设置墙纸】
wall X:\XX\XX\XX.jpg
其中:X:\XX\XX\XX.jpg————由 1.txt 提供

作者: ShowCode    时间: 2023-11-24 12:09

回复 1# yyz219
  1. @echo off
  2. set "OldFile=a.txt"
  3. set "NewFile=%OldFile%.tmp"
  4. set "InputFile=1.txt"
  5. cd /d "%~dp0"
  6. set /p NewStr=<"%InputFile%"
  7. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%OldFile%"') do (
  8.     if "%%b" == "" (
  9.         echo,
  10.     ) else (
  11.         set "OldStr=%%b"
  12.         setlocal enabledelayedexpansion
  13.         if not "!OldStr:wall =!" == "!OldStr!" (
  14.             echo wall %NewStr%
  15.         ) else (
  16.             echo,!OldStr!
  17.         )
  18.         endlocal
  19.     )
  20. ))>"%NewFile%"
  21. move /y "%NewFile%" "%OldFile%" >nul
复制代码

作者: yyz219    时间: 2023-11-24 12:25

回复 2# ShowCode
我试一试先 谢谢
作者: yyz219    时间: 2023-11-24 12:29

回复 2# ShowCode


    成功了 再次感谢
作者: yyz219    时间: 2023-11-24 22:03

回复 2# ShowCode

*.JPG 的路径中,如果有 ! 号,! 号会丢失

例如:

D:\PE整理碎片(很好)\修改PE\程序\!墙纸\灰色.jpg
  运行以后变为:

D:\PE整理碎片(很好)\修改PE\程序\墙纸\灰色.jpg

能不能修改一下?谢谢
作者: ShowCode    时间: 2023-11-24 23:16

回复 5# yyz219


2楼第14行的%NewStr%改成!NewStr!
  1. @echo off
  2. set "OldFile=a.txt"
  3. set "NewFile=%OldFile%.tmp"
  4. set "InputFile=1.txt"
  5. cd /d "%~dp0"
  6. set /p NewStr=<"%InputFile%"
  7. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%OldFile%"') do (
  8.     if "%%b" == "" (
  9.         echo,
  10.     ) else (
  11.         set "OldStr=%%b"
  12.         setlocal enabledelayedexpansion
  13.         if not "!OldStr:wall =!" == "!OldStr!" (
  14.             echo wall !NewStr!
  15.         ) else (
  16.             echo,!OldStr!
  17.         )
  18.         endlocal
  19.     )
  20. ))>"%NewFile%"
  21. move /y "%NewFile%" "%OldFile%" >nul
复制代码

作者: yyz219    时间: 2023-11-25 07:42

回复 6# ShowCode
再次感谢
作者: qixiaobin0715    时间: 2023-11-25 09:05

  1. @echo off
  2. set /p var=<1.txt
  3. (for /f "tokens=1*" %%i in (a.txt) do (
  4.     if /i not "%%i"=="wall" (
  5.         if "%%j"=="" (
  6.             echo,%%i
  7.         ) else (
  8.             echo,%%i %%j
  9.         )
  10.     ) else (
  11.         echo,%%i %var%
  12.     )
  13. ))>temp
  14. move /y "temp" "a.txt"
复制代码

作者: yyz219    时间: 2023-11-25 10:18

回复 8# qixiaobin0715


    我试一试先 谢谢
作者: yyz219    时间: 2023-11-25 10:32

回复 8# qixiaobin0715


    成功了 再次感谢




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