无忧启动论坛

标题: 大佬们好,这个批处理为何显示乱码? [打印本页]

作者: 2010jorlaying    时间: 2024-5-10 10:04
标题: 大佬们好,这个批处理为何显示乱码?
本帖最后由 2010jorlaying 于 2024-5-10 12:42 编辑

最近电脑换了Win11 26100的版本,之前有个批处理文件不能正常使用了。之前一直都可以。是哪里错了。

  1. @echo off
  2. ::网卡名称注意替换 示例: "Ethernet0"
  3. for /f "tokens=2 delims=: " %%b in ('netsh interface show interface "Ethernet0" ^| find /i "管理状态"') do set "net=%%b"
  4. echo %net%
  5. pause
复制代码


作者: yyz2191958    时间: 2024-5-10 10:25
是不是编码问题?
作者: szwp    时间: 2024-5-10 10:27
乱成什么样?
作者: yxldh    时间: 2024-5-10 10:38
本帖最后由 yxldh 于 2024-5-10 10:46 编辑

首先看文件编码 ANSI和utf8之间更换一下,还要看Ethernet0有没有改变,系统netsh命令里面的“管理状态”有没有改变
作者: zlq_hysy    时间: 2024-5-10 10:38
本帖最后由 zlq_hysy 于 2024-5-10 10:41 编辑

用记事本打开,另存时,选ANSI模式。

2024-05-10_104009.jpg (69.65 KB, 下载次数: 45)

2024-05-10_104009.jpg

作者: wang1126    时间: 2024-5-10 11:00
zlq_hysy 发表于 2024-5-10 10:38
用记事本打开,另存时,选ANSI模式。

感谢分享
作者: reninhouse    时间: 2024-5-10 11:34
进来学习
作者: 2010jorlaying    时间: 2024-5-10 12:29
zlq_hysy 发表于 2024-5-10 10:38
用记事本打开,另存时,选ANSI模式。

确定是ANSI,在WIN7,WIN10,WIN11 22H2上都是正常显示的。升级24H2后就不行了
作者: maisifu    时间: 2024-5-10 12:30
编码格式问题哈
作者: 2010jorlaying    时间: 2024-5-10 12:36
yxldh 发表于 2024-5-10 10:38
首先看文件编码 ANSI和utf8之间更换一下,还要看Ethernet0有没有改变,系统netsh命令里面的“管理状态”有 ...

WIN7,WIN10,WIN11 22H2都是正常显示,24H2才这样。
作者: guong    时间: 2024-5-10 12:42
来学习下
作者: zlq_hysy    时间: 2024-5-10 12:42
2010jorlaying 发表于 2024-5-10 12:29
确定是ANSI,在WIN7,WIN10,WIN11 22H2上都是正常显示的。升级24H2后就不行了

在批处理的最前面加一句:chcp 65001        看看有没有改善?
作者: holley2008    时间: 2024-5-10 12:53
本帖最后由 holley2008 于 2024-5-10 12:59 编辑

有点像win11 24H2输出内容跟之前不一致,你对比一下内容看看差别,看是不是要修正一下:“tokens=2 delims=: ”或者对去除一下结果前后的空格或其它异常字符
  1. for /f "tokens=*" %%c in ("%net%") do set "net=%%c"
  2. echo %net%
复制代码



作者: linshi456    时间: 2024-5-10 13:33
WIN10,WIN11 22H2  命令行执行 chcp
24H2 命令行执行chcp
比较两类当前活动代码页是否一样

作者: 2010jorlaying    时间: 2024-5-10 13:35
linshi456 发表于 2024-5-10 13:33
WIN10,WIN11 22H2  命令行执行 chcp
24H2 命令行执行chcp
比较两类当前活动代码页是否一样

一样的 936
作者: 2010jorlaying    时间: 2024-5-10 13:38
holley2008 发表于 2024-5-10 12:53
有点像win11 24H2输出内容跟之前不一致,你对比一下内容看看差别,看是不是要修正一下:“tokens=2 delims= ...

试了不截取,整行输出也是乱码。还发现不能用findstr,只能用find。感觉是bug
作者: 2010jorlaying    时间: 2024-5-10 13:38
zlq_hysy 发表于 2024-5-10 12:42
在批处理的最前面加一句:chcp 65001        看看有没有改善?

没用 试过
作者: hua_wuxin    时间: 2024-5-10 13:44
系统是不是加装了中文语言包的英文版24H2 LTSC?如果是的话传统控制面板(Control.exe)里这里有没有改对?

作者: linshi456    时间: 2024-5-10 13:52
笨办法
1、  24H2 里新建txt,直接输出 echo 中文,运行行看看
2 、24H2 里新建txt,照着老代码,手打一遍,不要复制,运行看看

作者: shanghui6666    时间: 2024-5-10 13:52
辛苦了
作者: 2010jorlaying    时间: 2024-5-10 13:54
hua_wuxin 发表于 2024-5-10 13:44
系统是不是加装了中文语言包的英文版24H2 LTSC?如果是的话传统控制面板(Control.exe)里这里有没有改对? ...

不是LTSC+语言包,是专业版,我这里跟你的图片是一模一样的
作者: 2010jorlaying    时间: 2024-5-10 14:03
linshi456 发表于 2024-5-10 13:52
笨办法
1、  24H2 里新建txt,直接输出 echo 中文,运行行看看
2 、24H2 里新建txt,照着老代码,手打一 ...

试过直接ECHO中文正常的
作者: hua_wuxin    时间: 2024-5-10 14:37
本帖最后由 hua_wuxin 于 2024-5-10 15:10 编辑

更正:dir 新建文本文档.txt >2.txt,得到的2.txt也是显示为UTF-8编码的。所以不能说netsh输出有问题。

----------------------------------
确实有问题。在24H2下执行
netsh interface show interface "Ethernet0" >1.txt
,得到的1.txt是UTF-8编码的,跟其他普通命令例如dir、以及在之前的系统下得到的不一样。
作者: 2010jorlaying    时间: 2024-5-10 14:43
hua_wuxin 发表于 2024-5-10 14:37
确实有问题。在24H2下执行
netsh interface show interface "Ethernet0" >1.txt
,得到的1.txt是UTF-8编 ...


是不是目前所有的24H2都是合成的?英文系统加中文语言包的缘故?
作者: linshi456    时间: 2024-5-10 14:54
2010jorlaying 发表于 2024-5-10 14:43
是不是目前所有的24H2都是合成的?英文系统加中文语言包的缘故?

另一种可能,今后微软软件统一成uft8编码,再进一步统一成unicode。unicode比utf8编码占用空间大。

你把原来批处理文件另存为uft8。放在24h2上执行看看
作者: 2010jorlaying    时间: 2024-5-10 15:03
linshi456 发表于 2024-5-10 14:54
另一种可能,今后微软软件统一成uft8编码,再进一步统一成unicode。unicode比utf8编码占用空间大。

你 ...

用UFT8只能英文,输出也是英文,中文直接就闪退了
作者: linshi456    时间: 2024-5-10 15:16
中文闪退,想不通。uft8支持中文的。难道系统bug,或是微软修改了命令

也许原批命令文件有点问题。想不通。

只能笨办法,24H2 里新建txt, 照着老代码,手打一遍,不要复制。分别保存ansi和utf8,运行看看。

还有没有其他大佬知道的
作者: 2010jorlaying    时间: 2024-5-10 15:21
本帖最后由 2010jorlaying 于 2024-5-10 15:26 编辑
linshi456 发表于 2024-5-10 15:16
中文闪退,想不通。uft8支持中文的。难道系统bug,或是微软修改了命令

也许原批命令文件有点问题。想不 ...


其实用UFT8算能解决需求,就是有点不方便而已 算是解决问题了,如果后期能修复这个问题更好。
不然得准备两份bat,因为UFT8反过来在WIN7 10上又不能用。真是蛋疼

作者: linshi456    时间: 2024-5-10 15:37
24h2系统txt和命令行估计默认utf8,如需要改注册表改成936,和老系统一致,但别人用24h2就不方便。
作者: szwp    时间: 2024-5-10 15:43
本帖最后由 szwp 于 2024-5-10 15:44 编辑

判断系统版本,考虑转码
作者: 2010jorlaying    时间: 2024-5-10 15:45
linshi456 发表于 2024-5-10 15:37
24h2系统txt和命令行估计默认utf8,如需要改注册表改成936,和老系统一致,但别人用24h2就不方便。

这是个错误的决定,很多老BAT都会挂
作者: magicgenius    时间: 2024-5-10 15:50
应该是 netsh interface show interface 输出的字符编码为UTF8,而for命令并不支持UTF8 中文编码。
作者: Su_jacc    时间: 2024-5-10 16:22
WIN10常遇到的问题,另存为原文件名覆盖,编码选择ANSI就可以了
作者: ZYYDS-FT798    时间: 2024-5-10 22:17
我试过了这是个BUG  只有 h24 会这样,其他版本不会的
作者: martin313    时间: 2024-5-10 22:43

批处理开头,加上:

setlocal enabledelayedexpansion  
chcp 65001
CLS
作者: 2010jorlaying    时间: 2024-5-11 10:23
ZYYDS-FT798 发表于 2024-5-10 22:17
我试过了这是个BUG  只有 h24 会这样,其他版本不会的

多谢,希望是BUG,如果真是改动那就太麻烦了。
作者: cyh92    时间: 2024-5-11 10:40
估计是编码问题吧
作者: szwp    时间: 2024-5-11 10:46
先不用for等不乱后再用
作者: 2010jorlaying    时间: 2024-5-11 11:26
szwp 发表于 2024-5-11 10:46
先不用for等不乱后再用

只能是这样了。看看RTM后怎么样。
作者: 2010jorlaying    时间: 2024-5-11 11:28
cyh92 发表于 2024-5-11 10:40
估计是编码问题吧

对,24H2打印中文变UTF-8了,其他命令无法识别。
作者: szwp    时间: 2024-5-11 12:09
2010jorlaying 发表于 2024-5-11 11:26
只能是这样了。看看RTM后怎么样。

以乱治乱也是可以的,将netsh的结果粘贴上来。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3