Board logo

标题: [文本处理] 批处理如何根据最后1列修改数值? [打印本页]

作者: 娜美    时间: 2022-7-8 12:12     标题: 批处理如何根据最后1列修改数值?

本帖最后由 娜美 于 2022-7-8 18:39 编辑

大家好 文件夹内有多个 *.txt文件  需要批量将里面内容修改,   最好可以直接对源文件里面内容数值修改会更好,   因为不用产生另一个输出新文件名,   如不可  则需要输出的文件名称 和 输入的文件名称相同

*.txt
下面    如果最后1列的最后一个数字是2,  测需要将第2列修改为 01 数值,  如果是其他数字, 则不做任何处理   
W*02*8ee*bb*c038*f86bdb6e*010fac020000*02
W*02*8ee*bb*c038*f86bdb6e*010fac020000*90
W*02*8ee*bb*c038*f86bdb6e*010fac020000*95
W*01*Y5333*T5D54D*DR4ER45W32***
W*01*Y5333*T5D54D*DR4ER45W3


改动后  
W*01*8ee*bb*c038*f86bdb6e*010fac020000*02
W*02*8ee*bb*c038*f86bdb6e*010fac020000*90
W*02*8ee*bb*c038*f86bdb6e*010fac020000*95
W*01*Y5333*T5D54D*DR4ER45W32***
W*01*Y5333*T5D54D*DR4ER45W3


谢谢 Thanks.....
作者: hfxiang    时间: 2022-7-8 13:15

@echo off
setlocal EnableDelayedExpansion
for /f %%i in (1.txt) do (
        set "str=%%i"
        if [!str:~-1!]==[2] (
                echo !str:~0,2!01!str:~4!
        ) else (
                echo %%i
        )
)
endlocal
作者: 娜美    时间: 2022-7-8 14:37

本帖最后由 娜美 于 2022-7-8 14:39 编辑

回复 2# hfxiang


    似乎可以, 谢谢hfxiang哥哥,     但是可以直接对源文件进行修改吗(即直接修改源文件) ,   不想再产生新输出文件了
作者: 娜美    时间: 2022-7-8 14:56

回复 2# hfxiang


   测了一下如果前面多了几个字母会有错误
WGJ*02*8ee*bb*c038*f86bdb6e*010fac020000*02

WGGJ6*02*8ee*bb*c038*f86bdb6e*010fac020000*02


作者: qixiaobin0715    时间: 2022-7-8 16:15

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (1.txt) do (
  4.     set "str=%%a"
  5.     if "!str:~-1!"=="2" (
  6.         for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
  7.     )
  8.     echo,!str!
  9. )
  10. pause
复制代码

作者: 娜美    时间: 2022-7-8 17:03

回复 5# qixiaobin0715


   很好  如果可以直接在源文件里面修改会更好,   因为不用产生另一个新文件名   谢谢了
作者: flashercs    时间: 2022-7-8 17:12

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4. for /f "delims=" %%a in (1.txt) do (
  5.     set "str=%%a"
  6.     if "!str:~-1!"=="2" (
  7.         for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
  8.     )
  9.     echo,!str!
  10. )
  11. )>"%temp%\abc.txt"
  12. move /y "%temp%\abc.txt" 1.txt
  13. endlocal
  14. pause
复制代码

作者: 娜美    时间: 2022-7-10 12:07

本帖最后由 娜美 于 2022-7-10 12:08 编辑

回复 5# qixiaobin0715


我改成这样后为什么不能批量对所有文件修改呢
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4. for /f "delims=" %%a in (*.txt) do (
  5.     set "str=%%a"
  6.     if "!str:~-1!"=="2" (
  7.         for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
  8.     )
  9.     echo,!str!
  10. )
  11. )>%%a.txt
  12. endlocal
  13. pause
复制代码

作者: qixiaobin0715    时间: 2022-7-11 09:09

未测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%I in ('dir /b /a-d *.txt') do (
  4.     (for /f "delims=" %%a in ('type "%%I"') do (
  5.         set "str=%%a"
  6.         if "!str:~-1!"=="2" (
  7.             for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
  8.         )
  9.         echo,!str!
  10.     ))>$
  11.     move "$" "%%I"
  12. )
  13. pause
复制代码

作者: qixiaobin0715    时间: 2022-7-11 14:24

这样可能更精确一些,如果文件中不存在最后一个字符是2的行,则不处理:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%I in ('findstr /r /m "2$" *.txt') do (
  4.     (for /f "delims=" %%a in ('type "%%I"') do (
  5.         set "str=%%a"
  6.         if "!str:~-1!"=="2" (
  7.             for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
  8.         )
  9.         echo,!str!
  10.     ))>$
  11.     move "$" "%%I"
  12. )
  13. pause
复制代码

作者: aloha20200628    时间: 2022-7-11 14:31

@echo off &setlocal enabledelayedexpansion
dir/b/a-d *.txt>tmpF.lst
for /f "delims=" %%F in (tmpF.lst) do (
        for /f "usebackq delims=" %%s in ("%%F") do (
                set "s=%%s"
                if !s:~-1! neq 2 (echo,%%s) else (
                        for /f "tokens=1-2* delims=*" %%1 in ("%%s") do (echo,%%1*01*%%3)
                )
        )>>tmpF
        move /y tmpF "%%~nxF">nul
)
endlocal&(del/q tmpF.lst)&exit/b
作者: 娜美    时间: 2022-7-11 15:57

可以了  多谢各位哥哥了
作者: hfxiang    时间: 2022-7-12 14:36

本帖最后由 hfxiang 于 2022-7-12 14:44 编辑

@echo off
setlocal EnableDelayedExpansion
(for /f %%i in (1.txt) do (
    set "str=%%i"
    if [!str:~-1!]==[2] (
                set "str1=!str:**=!"
                set "str2=!str1!"
                call set "str1=%%str:!str1!=%%"
                set "str2=!str2:**=!"
                echo;!str1!01*!str2!
        ) else (
                echo;%%i
        )
)
)>temp_1.txt
move /y temp_1.txt 1.txt
endlocal




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