标题: [文本处理] 批处理如何根据最后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
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- set "str=%%a"
- if "!str:~-1!"=="2" (
- for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
- )
- echo,!str!
- )
- pause
复制代码
作者: 娜美 时间: 2022-7-8 17:03
回复 5# qixiaobin0715
很好 如果可以直接在源文件里面修改会更好, 因为不用产生另一个新文件名 谢谢了
作者: flashercs 时间: 2022-7-8 17:12
- @echo off
- setlocal enabledelayedexpansion
- (
- for /f "delims=" %%a in (1.txt) do (
- set "str=%%a"
- if "!str:~-1!"=="2" (
- for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
- )
- echo,!str!
- )
- )>"%temp%\abc.txt"
- move /y "%temp%\abc.txt" 1.txt
- endlocal
- pause
复制代码
作者: 娜美 时间: 2022-7-10 12:07
本帖最后由 娜美 于 2022-7-10 12:08 编辑
回复 5# qixiaobin0715
我改成这样后为什么不能批量对所有文件修改呢
- @echo off
- setlocal enabledelayedexpansion
- (
- for /f "delims=" %%a in (*.txt) do (
- set "str=%%a"
- if "!str:~-1!"=="2" (
- for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
- )
- echo,!str!
- )
- )>%%a.txt
- endlocal
- pause
复制代码
作者: qixiaobin0715 时间: 2022-7-11 09:09
未测试:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%I in ('dir /b /a-d *.txt') do (
- (for /f "delims=" %%a in ('type "%%I"') do (
- set "str=%%a"
- if "!str:~-1!"=="2" (
- for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
- )
- echo,!str!
- ))>$
- move "$" "%%I"
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2022-7-11 14:24
这样可能更精确一些,如果文件中不存在最后一个字符是2的行,则不处理:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%I in ('findstr /r /m "2$" *.txt') do (
- (for /f "delims=" %%a in ('type "%%I"') do (
- set "str=%%a"
- if "!str:~-1!"=="2" (
- for /f "tokens=1,2* delims=*" %%i in ("%%a") do set "str=%%i*01*%%k"
- )
- echo,!str!
- ))>$
- move "$" "%%I"
- )
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |