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

[文本处理] 批处理如何根据最后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.....

@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

TOP

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

回复 2# hfxiang


    似乎可以, 谢谢hfxiang哥哥,     但是可以直接对源文件进行修改吗(即直接修改源文件) ,   不想再产生新输出文件了

TOP

回复 2# hfxiang


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

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

TOP

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

TOP

回复 5# qixiaobin0715


   很好  如果可以直接在源文件里面修改会更好,   因为不用产生另一个新文件名   谢谢了

TOP

  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
复制代码
微信:flashercs
QQ:49908356

TOP

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

TOP

未测试:
  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
复制代码

TOP

这样可能更精确一些,如果文件中不存在最后一个字符是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
复制代码

TOP

@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

TOP

可以了  多谢各位哥哥了

TOP

本帖最后由 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

TOP

返回列表