标题: [文本处理] 如何批处理把每一行中的某一列批量取出 [打印本页]
作者: hackes 时间: 2021-6-22 13:10 标题: 如何批处理把每一行中的某一列批量取出
请教如何用bat批量把 a.txt 文本中的每一行其中一列取出到 b.txt ,保持顺序不变
例如以下内容,我想把每一行"复制"前面的数值批量取出,比如第一条取出518数值
06-21 17:14 雅黛小棕瓶七代特润100ml 518 复制
06-21 15:30 娇日晚霜新日 1080 复制
06-21 15:28 娇蜂姿水150ml 有小票 270 复制
06-21 15:23 植村秀55号刷子 220 复制
06-21 15:21 香儿山花洁面新 308 复制
06-21 15:19 雅黛抗蓝光眼霜15ML 218 复制
作者: newswan 时间: 2021-6-22 13:51
有的是第四列有的是第五列?
作者: qixiaobin0715 时间: 2021-6-22 14:47
列与列之间是用制表符还是固定数量的空格分隔的?
作者: yhcfsr 时间: 2021-6-22 17:11
本帖最后由 yhcfsr 于 2021-6-22 18:28 编辑
powershell 正则,何其简单- @powershell -c "gc a.txt|foreach-object{$_ -replace '.*\s+(\d+)\s+复制.*','$1'}|Out-File -FilePath b.txt"
复制代码
作者: yakeyun 时间: 2021-7-18 12:57
本帖最后由 yakeyun 于 2021-7-18 16:19 编辑
可以先判断,如果所取值=有小票,就取第5列并输出,否则输出第四列。
大致思路如下,但是%%b输出不对,麻烦大佬看下是哪里出了问题。
@echo off
setlocal EnableDelayedExpansion
set "pj = 有小票"
(for /f "tokens=4,5" %%a in (a.txt) do (
if %%a == pj (
echo,%%b >> b.txt
) else (
echo,%%a >> b.txt
)
)
)
exit
用pause截获方法,终于找到原因。通过修改找到了BUG
截取结果:
我是非小票输出行
518
我是非小票输出行
1080
我是非小票输出行
有小票
我是非小票输出行
220
我是非小票输出行
308
我是非小票输出行
218
发现是没有判断,所以通过代码测试,最终代码如下:
@echo off
setlocal EnableDelayedExpansion
(for /f "tokens=4,5" %%a in ('type "a.txt"') do (
if %%a == 有小票 (
echo 我是小票输出行 >> b.txt
echo,%%b >> b.txt
) else (
echo 我是非小票输出行 >> b.txt
echo,%%a >> b.txt
)
)
)
exit
再次测试结果正常:
我是非小票输出行
518
我是非小票输出行
1080
我是小票输出行
270
我是非小票输出行
220
我是非小票输出行
308
我是非小票输出行
218
作者: yakeyun 时间: 2021-7-18 16:14
回复 7# yakeyun
最终代码:
@echo off
setlocal EnableDelayedExpansion
(for /f "tokens=4,5" %%a in ('type "a.txt"') do (
if %%a == 有小票 (
echo,%%b >> b.txt
) else (
echo,%%a >> b.txt
)
)
)
exit
作者: qixiaobin0715 时间: 2021-7-18 17:16
如果像楼主提供的格式的话,可以取倒数第二列的数值:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- set "str1=%%a"
- set str1=!str1:复制=!
- for %%i in (!str1!) do set str2=%%i
- echo,!str2!
- )
- pause
复制代码
作者: CrLf 时间: 2021-7-24 00:00
邪恶解法- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- for %%b in ("!str: =\!\..") do echo;%%~nb
- endlocal
- ))>b.txt
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |