找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 13602|回复: 14

[文本处理] [已解决]求助批处理选出文本中,第一列为4码的行

[复制链接]
发表于 2024-9-28 10:04:53 | 显示全部楼层 |阅读模式
求助  將  A.txt文本中   选出,第一列为4码的行到   B.txt

a文本:
0055,20240905,28.32
00632,20240905,3.58
6929,20240905,54.00
XJF00,20240905,143.48
9941A,20240905,50.00
B0861,20240905,6.66
9928,20240905,20.10,20.40
IDX11,20240905,156.39
Y001B,20240905,8.58
2329,20240905,57.00

b文本:
0055,20240905,28.32
6929,20240905,54.00
9928,20240905,20.10,20.40
2329,20240905,57.00

  谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-9-28 10:10:27 | 显示全部楼层
  1. findstr /b "[0-9][0-9][0-9][0-9]," a.txt>b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
KLL + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-9-28 10:23:09 | 显示全部楼层
运行后, 赞 ,  谢谢您协助
发表于 2024-9-28 19:01:56 | 显示全部楼层
本帖最后由 fzp070 于 2024-9-28 19:26 编辑

回复 2# qixiaobin0715

大佬,如果第一列中含有字母或特殊字符、刚好也是4个码时,要提取出来需要怎么弄?谢谢

刚试了下,如下这样可识别字母类字符,但特殊字符要怎么弄,需要一个个都输在[]里面吗?
  1. findstr /b "[0-9、a-z][0-9、a-z][0-9、a-z][0-9、a-z]," "%cd%\a.txt">b.txt
复制代码
例如下这样的:
0055,20240905,28.32
00632,20240905,3.58
6929,20240905,54.00
XJF00,20240905,143.48
9941A,20240905,50.00
B0861,20240905,6.66
9928,20240905,20.10,20.40
IDX11,20240905,156.39
Y001B,20240905,8.58
2329,20240905,57.00
2j29,20240905,57.00
2J29,20240905,57.00

2@29,20240905,57.00
2、29,20240905,57.00
2 29,20240905,57.00
2        29,20240905,57.00
2·29,20240905,57.00
2~29,20240905,57.00
2!29,20240905,57.00
2!29,20240905,57.00
2@29,20240905,57.00
2#29,20240905,57.00
2¥29,20240905,57.00
2$29,20240905,57.00
2%29,20240905,57.00
2%29,20240905,57.00
2^29,20240905,57.00
2……29,20240905,57.00
2&29,20240905,57.00
2*29,20240905,57.00
2(29,20240905,57.00
2(29,20240905,57.00
2)29,20240905,57.00
2)29,20240905,57.00
2——29,20240905,57.00
2_29,20240905,57.00
2-29,20240905,57.00
2+29,20240905,57.00
2=29,20240905,57.00
2{29,20240905,57.00
2}29,20240905,57.00
2{29,20240905,57.00
2}29,20240905,57.00
2[29,20240905,57.00
2]29,20240905,57.00
2【29,20240905,57.00
2】29,20240905,57.00
2:29,20240905,57.00
2:29,20240905,57.00
2;29,20240905,57.00
2‘29,20240905,57.00
2'29,20240905,57.00
2“29,20240905,57.00
2”29,20240905,57.00
2"29,20240905,57.00
2"29,20240905,57.00
2,29,20240905,57.00
2,29,20240905,57.00
2《29,20240905,57.00
2<29,20240905,57.00
2>29,20240905,57.00
2》29,20240905,57.00
2。29,20240905,57.00
2.29,20240905,57.00
2/29,20240905,57.00
2/29,20240905,57.00
2?29,20240905,57.00
2?29,20240905,57.00
2\29,20240905,57.00
发表于 2024-9-28 19:39:37 | 显示全部楼层
回复 4# fzp070


  
  1. 2/29,20240905,57.00
  2. 2/29,20240905,57.00
复制代码
这两个需要保留哪个?
发表于 2024-9-28 19:45:47 | 显示全部楼层
回复 5# 77七

是的!
    如上仅只是举个例说,有可能 是任何字符,包含所有特殊字符。我上面特殊字符有些还没列全呢,比如有些英中文标点、半角全角区分。
发表于 2024-9-28 19:51:17 | 显示全部楼层
回复 6# fzp070


   全保留?
发表于 2024-9-28 19:55:40 | 显示全部楼层
本帖最后由 fzp070 于 2024-9-28 20:13 编辑

回复 7# 77七


    只是讨论学习下哈!有没有可能做到?弄不了也没事的,谢谢!

刚想了下,用for先将第一段提出来,再筛选出4个字符的行,应该能做到。有时间再研究下
发表于 2024-9-28 20:16:47 | 显示全部楼层
本帖最后由 77七 于 2024-9-28 20:19 编辑

回复 8# fzp070


  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "useback delims=" %%a in ("a.txt") do (
  4.         set str=%%a
  5.         setlocal enabledelayedexpansion
  6.         if "!str:~4,1!" equ "," (
  7.                 set "_str=!str:~0,4!"
  8.                 if "!_str:,=!" equ "!_str!" (
  9.                         echo=!str!
  10.                 )
  11.         )
  12.         endlocal
  13. )) > b.txt
  14. pause
复制代码
试下这个

评分

参与人数 1技术 +1 收起 理由
fzp070 + 1 不错!学习了

查看全部评分

发表于 2024-9-28 20:32:07 | 显示全部楼层
回复 9# 77七


    不错,基本完美,只是遇到如下这样的不好办
232,,20240905,57.00
发表于 2024-9-28 20:35:21 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-9-28 20:38 编辑

回复 8# fzp070

  1. @echo off &(for /f "delims=" %%a in (a.txt) do (
  2.         set "s=%%a" &setlocal enabledelayedexpansion
  3.         if "!s:~4,1!"=="," echo,!s:~,4!
  4.         endlocal
  5. ))>b.txt
  6. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
fzp070 + 1 很不错!

查看全部评分

发表于 2024-9-28 20:42:01 | 显示全部楼层
回复 11# aloha20200628


    不错,解决了10楼提出的问题!感谢指教,学习了
发表于 2024-9-28 20:48:11 | 显示全部楼层
回复 10# fzp070


   这个是代码中设定特意排除的情况。如
  1. ,,,,,
  2. 1,2,,
  3. 1,,2,
复制代码

是希望保留这3个?那还有列的概念吗...

评分

参与人数 1技术 +1 收起 理由
fzp070 + 1 说得对!是我定义分隔时有问题

查看全部评分

发表于 2024-9-28 21:04:53 | 显示全部楼层
本帖最后由 fzp070 于 2024-9-28 21:19 编辑

回复 13# 77七

你说得对,是我没定义清楚。不然11楼的也会遇到问题。
你9楼没问题。11楼的也可以。问题结束!感谢各位大佬!
发表于 2024-9-29 08:22:46 | 显示全部楼层
回复 4# fzp070
如果都ASCII编码(单字节)字符的话:
  1. findstr /b "[^,][^,][^,][^,]," a.txt>b.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:43 , Processed in 0.019354 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表