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

[系统相关] 郁闷,win11的UTF-8,怎么破?

刚从win7直接上手win11,谁知道记事本默认为utf-8格式,网搜注册表办法重启无效,属性关联其他记事本软件不让。
以前写的、网上收集的bat,都是处理ansi txt的,要是都做修改非常不现实。喜欢用的ini后缀过渡文件也是utf-8,直接导致不敢用bat来处理文本了。
坛友们,你们都是怎么破的。有没有办法从系统上搞定,或者能让系统默认txt等用指定工具处理,而不是修改bat的办法。
啥语言也不会,只会用bat处理个文本,提取个数据啥的。这下碰墙上了。
目的,学习批处理

换吧,随便换个脚本都比 BAT 舒服以及强大。

TOP

转 powershell 吧
如果旧的要用,转 ansi , bat ,转 utf8

TOP

弃用系统自带的笔记本,装个其它文本软件
bat小白,请多指教!谢谢!

TOP

为什么“关联其他记事本软件不让”?
我写文件都不用记事本的,直接改关联程序:
  1. ftype txtfile=第三方程序 %1
  2. ftype inifile=第三方程序 %1
复制代码

TOP

谢谢楼上各位的建议和方法。
如果再早十年,我一定学习powershell,英语那个难啊,一串字母都认识,和起来记不住了。投降。
谢谢5楼,就用你的办法了。
谢谢各位!
目的,学习批处理

TOP

谢谢楼上各位的建议和方法。
如果再早十年,我一定学习powershell,英语那个难啊,一串字母都认识,和起来 ...
hlzj88 发表于 2024-1-10 22:00



    种一棵树,最好的时间是十年前,其次是现在。

TOP

  1. chcp 65001
复制代码
然后批处理就支持utf-8了,type命令啥的都没问题
想回到gbk,就
  1. chcp 936
复制代码

TOP

回复 1# hlzj88


1、用其它编辑器替代记事本
2、把BAT脚本也另存为UTF-8
  1. chcp 65001 >nul
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher

谢谢坛主
不是最好的解决办法。主要系统不允许把txt文件关联为其他文本编辑软件,文件保护也不可能替换同名exe。所以产生的文件是utf-8无法抗拒。在bat语句里直接处理就面临格式问题。和bat是否为utf-8可能没关系。
chcp 只是改变环境,不能改变文件特性,处理中文内容就比较麻烦。

再次谢谢523066680版主勉励。
目的,学习批处理

TOP

回复 10# hlzj88


和bat是否为utf-8可能没关系。

能否给个例子说明一下:

  • txt是UTF-8编码
  • bat也是UTF-8编码
  • bat脚本开头使用了命令chcp 65001 >nul

以上三个条件同时满足的情况下,bat无法正常处理txt的问题?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# Batcher
我试了, findstr  汉字 这样的bat,存为utf-8,不能从ansi及utf-8格式txt里提取到关键词。 ansi格式的bat和txt产生的txt是ansi格式。
系统原因,如上面说的,新建txt都默认为utf-8,所以以往的工具都面临问题。
我原来的bat 只统一utf-8 为 ansi 来处理 dchp 936
在bat内语句产生或读取txt ini等类txt文件,都将面临编码判断。

刚有一个想法,也许只要在整体处理的前面部分做到ansi,也许后面就是继承格式。需要试了才确认

论坛txt附件都不能保存,
目的,学习批处理

TOP

回复 12# hlzj88


如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

目测问题是 findstr 是 ANSI
所以 type 1.txt | findstr "abc"
这样行不行

QQ 20147578

TOP

本帖最后由 czjt1234 于 2024-1-17 21:11 编辑

或者再弄个utf8转ansi的批处理或vbs或ps
在你的每个批处理的开头调用一下
比如把下面的vbs保存为 d:\UTF8toANSI.vbs
然后在你的批处理开头加上
start /w WScript.exe d:\UTF8toANSI.vbs "xxx.ini"
支持命令行参数,比如 start /w WScript.exe d:\UTF8toANSI.vbs "%%i"
  1. Dim oStream, file, s
  2. file = wsh.Arguments(0)
  3. If checkUTF8(file) = False Then wsh.Quit()
  4. Set oStream = CreateObject("ADODB.Stream")
  5. oStream.Type = 2    'adTypeText
  6. oStream.Mode = 3    'adModeReadWrite
  7. oStream.Charset = "UTF-8"
  8. oStream.Open()
  9. oStream.LoadFromFile file
  10. s = oStream.ReadText()
  11. oStream.Close()
  12. oStream.Charset = "GB2312"
  13. oStream.Open()
  14. oStream.WriteText s
  15. oStream.SaveToFile file, 2    'adSaveCreateOverWrite
  16. oStream.Close()
  17. Function checkUTF8(ByVal file)
  18.     Dim oStream, oRegExp, arr(), s
  19.     Set oStream = CreateObject("ADODB.Stream")
  20.     oStream.Type = 1    'adTypeBinary
  21.     oStream.Mode = 3    'adModeReadWrite
  22.     oStream.Open()
  23.     oStream.LoadFromFile file
  24.     If oStream.Size = 0 Then
  25.         checkUTF8 = True
  26.         Exit Function
  27.     End If
  28.     ReDim arr(oStream.Size - 1)
  29.     For s = 0 To oStream.Size - 1
  30.         arr(s) = ChrW(AscB(oStream.Read(1)))
  31.     Next
  32.     oStream.Close()
  33.     s = "[\xC0-\xDF]([^\x80-\xBF]|$)"        & _
  34.         "|[\xE0-\xEF].{0,1}([^\x80-\xBF]|$)" & _
  35.         "|[\xF0-\xF7].{0,2}([^\x80-\xBF]|$)" & _
  36.         "|[\xF8-\xFB].{0,3}([^\x80-\xBF]|$)" & _
  37.         "|[\xFC-\xFD].{0,4}([^\x80-\xBF]|$)" & _
  38.         "|[\xFE-\xFE].{0,5}([^\x80-\xBF]|$)" & _
  39.         "|[\x00-\x7F][\x80-\xBF]"            & _
  40.         "|[\xC0-\xDF].[\x80-\xBF]"           & _
  41.         "|[\xE0-\xEF]..[\x80-\xBF]"          & _
  42.         "|[\xF0-\xF7]...[\x80-\xBF]"         & _
  43.         "|[\xF8-\xFB]....[\x80-\xBF]"        & _
  44.         "|[\xFC-\xFD].....[\x80-\xBF]"       & _
  45.         "|[\xFE-\xFE]......[\x80-\xBF]"      & _
  46.         "|^[\x80-\xBF]"
  47.     Set oRegExp = New RegExp
  48.     oRegExp.MultiLine = False
  49.     oRegExp.Pattern = s
  50.     checkUTF8 = Not oRegExp.Test(Join(arr, ""))
  51. End Function
复制代码

QQ 20147578

TOP

返回列表