[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】请问如何解决批处理命令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”这组字符的行

请问如何解决查找汉字的问题?

回复 1# aceamuro


   这个好像可以实现类似的效果
  1. #@&cls&powershell -nop "type '%~f0'|out-string|iex"&pause&exit
  2. sls -enc default "2022年4月16日" ".\aaa.txt"  >bbb.txt
复制代码
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 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
复制代码
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 3# 5i365
把文件带上路径的话会红字出错,红字里还出现了相同目录里的其他文件,不会powershell…… 看不懂……

TOP

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

回复 4# aceamuro


   我测试是可以的, 路径加上""了吗? 另外要处理的文件编码 要GBK
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 1# aceamuro


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

如果还是不行,请把你测试用的文件和bat脚本打包上传到网盘我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

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

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

TOP

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

TOP

本帖最后由 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”这几个字符,不知道为什么……

TOP

不知你是什么逻辑。如何还要用echo显示,find不是直接就能显示吗?

TOP

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

TOP

回复 11# qixiaobin0715
用echo就是不在文件中寻找,直接显示那几个字符,用find显示的内容也是一样的

TOP

本帖最后由 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分别是多少号,问题可能出在这里

TOP

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

链接: https://pan.baidu.com/s/1y6B-JCL93tdSX-OLsfO5AQ?pwd=tbzm 提取码: tbzm

TOP

返回列表