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

[文本处理] 【已解决】请问如何解决批处理命令findstr处理汉字的问题?

[复制链接]
发表于 2022-4-18 17:21:34 | 显示全部楼层 |阅读模式
本帖最后由 aceamuro 于 2022-4-19 11:13 编辑
  1. findstr /i "2022年4月16日" aaa.txt>bbb.txt
复制代码
输出的bbb.txt是个空文件,如果把“2022年4月16日”换成文件中的英文字符比如“png”就正常
  1. findstr /i "png" aaa.txt>bbb.txt
复制代码
这样输出的bbb.txt就是带有“png”这组字符的行

请问如何解决查找汉字的问题?
发表于 2022-4-18 20:46:21 | 显示全部楼层
回复 1# aceamuro


   这个好像可以实现类似的效果
  1. #@&cls&powershell -nop "type '%~f0'|out-string|iex"&pause&exit
  2. sls -enc default "2022年4月16日" ".\aaa.txt"  >bbb.txt
复制代码
发表于 2022-4-18 21:00:36 | 显示全部楼层
回复 1# aceamuro

这个和CMD输出一致了

  
  1. #@&cls&powershell -nop "type '%~f0'|out-string|iex"&pause&exit
  2. (sls -enc default "2022年4月16日" ".\aaa.txt" | Select Line).line >bbb.txt
复制代码
 楼主| 发表于 2022-4-18 21:43:58 | 显示全部楼层
回复 3# 5i365
把文件带上路径的话会红字出错,红字里还出现了相同目录里的其他文件,不会powershell…… 看不懂……
发表于 2022-4-18 21:45:46 | 显示全部楼层
本帖最后由 5i365 于 2022-4-18 21:46 编辑

回复 4# aceamuro


   我测试是可以的, 路径加上""了吗? 另外要处理的文件编码 要GBK
发表于 2022-4-18 21:55:34 | 显示全部楼层
回复 1# aceamuro


请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA

如果还是不行,请把你测试用的文件和bat脚本打包上传到网盘我试试。
 楼主| 发表于 2022-4-19 08:47:01 | 显示全部楼层
回复 5# 5i365
路径都是加了""的
至于编码是不是GBK我也不太清楚,bat文件编码是ansi,aaa.txt编码是utf8
因为同一个bat中还有其他带中文字符的指令,所以只能用ansi。而那个aaa.txt实际上是用cURL拷贝下来的网页内容,好像只能输出为utf8
 楼主| 发表于 2022-4-19 08:54:28 | 显示全部楼层
本帖最后由 aceamuro 于 2022-4-19 09:11 编辑

回复 6# Batcher
的确是编码问题,aaa.txt手动改成ansi后就正常了,但aaa.txt本身是cURL保存的内容。
本来保存这个aaa.txt的bat也是ansi,但存下来的就变成utf8,总不能代码运行途中手动修改编码
怎么把保存的内容改成ansi还是个问题……
发表于 2022-4-19 09:01:46 | 显示全部楼层
回复 1# aceamuro
这样呢?存为UTF-8:
  1. @echo off
  2. chcp 65001
  3. find "2022年4月16日" a.txt
  4. pause
复制代码
 楼主| 发表于 2022-4-19 09:28:23 | 显示全部楼层
本帖最后由 aceamuro 于 2022-4-19 09:36 编辑

回复 9# qixiaobin0715
如果bat是ansi,代码中写chcp 65001,用echo显示“2022年4月16日”的结果是“2022��4��16��”
如果bat是utf8,代码中写chcp 65001,用echo显示“2022年4月16日”的结果是“2022年4月16日”(这个好像是多此一举)
如果bat是utf8,代码中写chcp 936,用echo显示“2022年4月16日”的结果是“2022骞?鏈?6鏃?”
总之这三种都没法正确输出bbb.txt

PS:另外仔细看了一下,第二种情况(如果bat是utf8,代码中写chcp 65001)中,
  1. findstr "2022年4月16日"
复制代码
被识别成了
  1. r "2022年4月16日"
复制代码
丢掉了指令中“findst”这几个字符,不知道为什么……
发表于 2022-4-19 09:37:51 | 显示全部楼层
不知你是什么逻辑。如何还要用echo显示,find不是直接就能显示吗?
发表于 2022-4-19 09:54:59 | 显示全部楼层
如果bat是utf8,代码中写chcp 65001,用echo显示“2022年4月16日”的结果是“2022年4月16日”(这个好像是多此一举)
你查找的不就是包含这个日期的行吗?
 楼主| 发表于 2022-4-19 09:57:46 | 显示全部楼层
回复 11# qixiaobin0715
用echo就是不在文件中寻找,直接显示那几个字符,用find显示的内容也是一样的
 楼主| 发表于 2022-4-19 09:59:50 | 显示全部楼层
本帖最后由 aceamuro 于 2022-4-19 10:13 编辑
如果bat是utf8,代码中写chcp 65001,用echo显示“2022年4月16日”的结果是“2022年4月16日”(这个好像是多 ...
qixiaobin0715 发表于 2022-4-19 09:54

只有cmd窗口中显示是正确的,但输出的bbb.txt还是空的
偶然发现好像utf8本身也不一样,bat用文本打开右下角utf8旁边显示的是windows(CRLF),而aaa.txt显示的是unix(LF)
但没查到这两种chcp分别是多少号,问题可能出在这里
 楼主| 发表于 2022-4-19 10:34:53 | 显示全部楼层
回复 16# qixiaobin0715
不是,如果按照Batcher说的手动全改成ANSI的确是没问题的
但问题在于aaa.txt是cURL自动生成的文件,实际运行过程中没法手动改编码

链接: https://pan.baidu.com/s/1y6B-JCL93tdSX-OLsfO5AQ?pwd=tbzm 提取码: tbzm
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 07:22 , Processed in 0.021726 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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