Board logo

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

作者: aceamuro    时间: 2022-4-18 17:21     标题: 【已解决】请问如何解决批处理命令findstr处理汉字的问题?

本帖最后由 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”这组字符的行

请问如何解决查找汉字的问题?
作者: 5i365    时间: 2022-4-18 20:46

回复 1# aceamuro


   这个好像可以实现类似的效果
  1. #@&cls&powershell -nop "type '%~f0'|out-string|iex"&pause&exit
  2. sls -enc default "2022年4月16日" ".\aaa.txt"  >bbb.txt
复制代码

作者: 5i365    时间: 2022-4-18 21:00

回复 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
复制代码

作者: aceamuro    时间: 2022-4-18 21:43

回复 3# 5i365
把文件带上路径的话会红字出错,红字里还出现了相同目录里的其他文件,不会powershell…… 看不懂……
作者: 5i365    时间: 2022-4-18 21:45

本帖最后由 5i365 于 2022-4-18 21:46 编辑

回复 4# aceamuro


   我测试是可以的, 路径加上""了吗? 另外要处理的文件编码 要GBK
作者: Batcher    时间: 2022-4-18 21:55

回复 1# aceamuro


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

如果还是不行,请把你测试用的文件和bat脚本打包上传到网盘我试试。
作者: aceamuro    时间: 2022-4-19 08:47

回复 5# 5i365
路径都是加了""的
至于编码是不是GBK我也不太清楚,bat文件编码是ansi,aaa.txt编码是utf8
因为同一个bat中还有其他带中文字符的指令,所以只能用ansi。而那个aaa.txt实际上是用cURL拷贝下来的网页内容,好像只能输出为utf8
作者: aceamuro    时间: 2022-4-19 08:54

本帖最后由 aceamuro 于 2022-4-19 09:11 编辑

回复 6# Batcher
的确是编码问题,aaa.txt手动改成ansi后就正常了,但aaa.txt本身是cURL保存的内容。
本来保存这个aaa.txt的bat也是ansi,但存下来的就变成utf8,总不能代码运行途中手动修改编码
怎么把保存的内容改成ansi还是个问题……
作者: qixiaobin0715    时间: 2022-4-19 09:01

回复 1# aceamuro
这样呢?存为UTF-8:
  1. @echo off
  2. chcp 65001
  3. find "2022年4月16日" a.txt
  4. pause
复制代码

作者: aceamuro    时间: 2022-4-19 09:28

本帖最后由 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”这几个字符,不知道为什么……
作者: qixiaobin0715    时间: 2022-4-19 09:37

不知你是什么逻辑。如何还要用echo显示,find不是直接就能显示吗?
作者: qixiaobin0715    时间: 2022-4-19 09:54

如果bat是utf8,代码中写chcp 65001,用echo显示“2022年4月16日”的结果是“2022年4月16日”(这个好像是多此一举)
你查找的不就是包含这个日期的行吗?
作者: aceamuro    时间: 2022-4-19 09:57

回复 11# qixiaobin0715
用echo就是不在文件中寻找,直接显示那几个字符,用find显示的内容也是一样的
作者: aceamuro    时间: 2022-4-19 09:59

本帖最后由 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分别是多少号,问题可能出在这里
作者: aceamuro    时间: 2022-4-19 10:34

回复 16# qixiaobin0715
不是,如果按照Batcher说的手动全改成ANSI的确是没问题的
但问题在于aaa.txt是cURL自动生成的文件,实际运行过程中没法手动改编码

链接: https://pan.baidu.com/s/1y6B-JCL93tdSX-OLsfO5AQ?pwd=tbzm 提取码: tbzm
作者: qixiaobin0715    时间: 2022-4-19 10:49

试试这个行吧
链接: https://pan.baidu.com/s/19Qm68e17SaY9gQOuGQbx9w?pwd=78ur 提取码: 78ur
作者: aceamuro    时间: 2022-4-19 11:12

回复 16# qixiaobin0715
这个可以,多谢了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2