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

[文本处理] 为什么批处理从txt文件提取的数字对应不对?

[复制链接]
发表于 2025-9-23 23:18:56 | 显示全部楼层 |阅读模式
我的temp.txt文件中包含下面这个数据行
稻谷、大米及大米粉,com11,"1006108,10062,10063,10064,1102902,1103193"
我想提取com11,及其后面的全部数值(即:1006108,10062,10063,10064,1102902,1103193)。我写的程序是:
  1. for /f "tokens=1,2* delims=," %%a in (temp.txt) do (
  2. echo %%b, %%c >keep.txt
  3. )
复制代码
但是,显示的结果却是1006108和10062,10063,10064,1102902,1103193。取得数值的顺序不对,这是为什么?
发表于 2025-9-24 01:02:19 | 显示全部楼层
回复 1# delab-1

很可能是当前码页与 temp.txt 编码不一致引起的,如果 temp.txt 是 utf-8 编码,可用以下代码试试...

  1. @echo off &chcp 65001>nul
  2. (for /f "tokens=1,2* delims=," %%a in (temp.txt) do echo,%%b, %%c)>keep.txt
  3. pause&exit/b
复制代码
如果 temp.txt 是 ansi(简中) 编码,可用以下代码...

  1. @echo off &chcp 936>nul
  2. (for /f "tokens=1,2* delims=," %%a in (temp.txt) do echo,%%b, %%c)>keep.txt
  3. pause&exit/b
复制代码
发表于 2025-9-24 03:35:36 | 显示全部楼层
回复 1# delab-1


    请把你的temp.txt上传到网盘我试试
 楼主| 发表于 2025-9-24 10:01:54 | 显示全部楼层
把“稻谷、大米及大米粉”中间的顿号删除就好了,我再试一试加入chcp 65001试一试。
 楼主| 发表于 2025-9-24 10:05:18 | 显示全部楼层
刚才测试了,的确加入chcp 65001以后问题就解决了,太感谢了。不过在批处理中遇到中文在处理方法上遇到很多问题,有没有比较好的总结方法可以学习一下
发表于 2025-9-24 10:53:25 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-9-24 10:57 编辑

回复 5# delab-1

最简单(或言兼容性更高)易记的一个守则,就是所谓的 '三点一线' 》即确保 '码页、批处理脚本编码、数据文件编码' 这三者一致,如下所示:
码页       批处理脚本编码   数据文件编码
936       ansi, gb2312    ansi, gb2312
65001   utf-8                utf-8
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:06 , Processed in 0.015218 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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