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

[系统相关] [探讨]批处理代码特殊字符冲突事件

批处理代码文件是ANSI格式,在Win11 23H2系统下显示是正常的ANSI编码,但是在24H2或者最新版本的记事本中显示为UTF-8,且中文内容全部为乱码,修改文件只能用第三方软件修改。
经过反复尝试删减和测试,发现只要删除下面3行内容的任意一行即可解决,有没有大佬能看出问题所在,还请解答一下造成问题的原因:
if %today% GTR 2030 (date 2024-12-12)
::===========BIOSDATESET==============
::===========BIOSDATESET==============

之前有一段代码在AMD处理器搭配铭瑄B450主板,会出现不执行的情况,后面也是修改了代码语句才可以正常使用。当时怀疑是CPU指令集出错导致的,但是找不到验证办法。
下面是全部代码:
  1. @echo off & setlocal enabledelayedexpansion
  2. set today=%date:~0,4%
  3. if %today% GTR 2030 (date 2024-12-12)
  4. ::===========BIOSDATESET==============
  5. for /f "tokens=1-3 delims=/" %%a in ('echo %date%') do (
  6. set "sysdate_y=%%a"
  7. set "sysdate_m=%%b"
  8. set "sysdate_d=%%c"
  9. set "sysdate_y=!sysdate_y: =!"
  10. set "sysdate_m=!sysdate_m: =!"
  11. set "sysdate_d=!sysdate_d: =!"
  12. )
  13. call C:\intel\10\cpuz_x64.exe -txt=1
  14. for /f "tokens=1,2" %%a in ('type C:\intel\10\1.txt ^|find /i "date" ^|find /i "/" ^|find /i "/"') do (
  15. if "%%a" equ "date" set "biosdate=%%b"
  16. )
  17. for /f "tokens=1-3" %%a in ('type C:\intel\10\1.txt ^|find /i "speed" ^|find /i "MHz"') do (
  18. if "%%a" equ "speed" set "MemorySpeed=%%b%%c"
  19. )
  20. for /f "tokens=1-3 delims=/" %%a in ('echo !biosdate!') do (
  21. set "biosdate=%%c/%%a/%%b"
  22. set "biosdate_y=%%c"
  23. set "biosdate_m=%%a"
  24. set "biosdate_d=%%b"
  25. set "biosdate_y=!biosdate_y: =!"
  26. set "biosdate_m=!biosdate_m: =!"
  27. set "biosdate_d=!biosdate_d: =!"
  28. )
  29. echo,!sysdate_y!
  30. echo,!biosdate_y!
  31. if !sysdate_y! gtr !biosdate_y! (set biosdate=!biosdate!_需刷BIOS)
  32. if !sysdate_y! equ !biosdate_y! (if !biosdate_m! lss 08 (set biosdate=!biosdate!_需刷BIOS))
  33. set "textFile=C:\Intel\11Home_Log.txt"
  34. call C:\intel\10\sed.exe -i "s#Update=BIOSDATE#Update=!biosdate!#g" %textFile%
  35. call C:\intel\10\sed.exe -i -i "s#_需刷BIOS##g" "%textFile%"
  36. call C:\intel\10\sed.exe -i "s#\([0-9]\{4\}\/[0-9]\{2\}\/[0-9]\{2\}\)#%biosdate%#g" %textFile%
  37. ::===========BIOSDATESET==============
  38. Start /min C:\intel\10\Motherboardinfo.exe
  39. ::for /f "tokens=3 delims=, " %%a in ('echo ^|pnputil /enum-devices /disconnected ^|find "实例 ID:"') do echo 移除设备:%%a & pnputil /remove-device "%%a" >nul
  40. if exist C:\OA3.BIN (goto End)
  41. cls
  42. Start /min C:\Intel\10\info\C-D.bat
  43. for %%d in (E F G H I J K L M N O P Q R S T U V W X Y Z) do (if exist %%d:\Autorun.inf (if exist %%d:\Setup.exe (call %%d:\Setup.exe) ))
  44. for /f "tokens=* delims=, " %%a in ('powershell -Command "Get-NetAdapter | Select-Object -ExpandProperty InterfaceDescription" ^|find /i "Realtek 8811CU Wireless LAN 802.11ac USB NIC"') do set "U9=%%a"
  45. for /f "tokens=* delims=, " %%a in ('powershell -Command "Get-NetAdapter | Select-Object -ExpandProperty InterfaceDescription" ^|find /i "Realtek RTL8192EU Wireless LAN 802.11n USB 2.0 Network Adapter"') do set "U3=%%a"
  46. if defined U9 (
  47. echo 存在无线网卡设备U9
  48. netsh wlan add profile filename="C:\RWorker_Test\Pwork_1_5G.xml"
  49. netsh wlan set profileparameter name="Pwork_1_5G" connectionmode=auto
  50. )
  51. if defined U3 (
  52. echo 存在无线网卡设备U3
  53. netsh wlan add profile filename="C:\RWorker_Test\Pwork_1_2G.xml"
  54. netsh wlan set profileparameter name="Pwork_1_2G" connectionmode=auto
  55. )
  56. if not defined U9 (
  57.   if not defined U3 (
  58.                                echo 不存在无线网卡设备
  59.                              )
  60.                                  )
  61. :LSXCE
  62. ::==========================自动化线体测试过程==========================
  63. for /f "tokens=2*delims=:^ " %%a in ('echo ^|C:\Intel\10\WIN10ACTIVE\UUDI-KEY\nwinfo_x64.exe --smbios ^|find "UUID:"') do set "UUID0=%%a"
  64. IF "%UUID0%"=="00020003-0004-0005-0006-000700080009" (C:\Intel\10\WIN10ACTIVE\UUDI-KEY\AMIDEWINx64.exe /SU  auto)
  65. IF "%UUID0%"=="FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF" (C:\Intel\10\WIN10ACTIVE\UUDI-KEY\AMIDEWINx64.exe /SU  auto)
  66. for /f "tokens=2*delims=:^ " %%b in ('echo ^|C:\Intel\10\WIN10ACTIVE\UUDI-KEY\nwinfo_x64.exe --smbios ^|find "UUID:"') do set "UUID1=%%b"
  67. if not "%UUID0%"=="%UUID1%" (
  68. echo %UUID0% >C:\Intel\10\UUID.dll
  69. echo %UUID1% >>C:\Intel\10\UUID.dll
  70. echo %date% %time%  主板SMBIOS_UUID刷写完成,即将重启系统。
  71. echo %date% %time%  主板SMBIOS_UUID刷写完成。 >>C:\Intel\10\UUID.dll
  72. shutdown /r /t 2
  73. PAUSE
  74. )
  75. cd /d C:\RWorker_Test
  76. Start RWorker.exe
  77. timeout -t 4 >nul
  78. Start C:\Intel\10\sinfo.exe
  79. echo,[系统运行状态] >C:\Intel\10\sinfo.ini
  80. set count=0
  81. set file=run_count.txt
  82. if exist %file% (
  83. set /p count=<%file%
  84. )
  85. set /a count+=1
  86. echo %count% > %file%
  87. if %count% gtr 1 (
  88.     echo,警告:这个脚本已经运行了 %count% 次.
  89. ) >>C:\Intel\10\sinfo.ini
  90. (
  91. echo,内存运行频率:!MemorySpeed!
  92. echo.
  93. ) >>C:\Intel\10\sinfo.ini
  94. :loop
  95. timeout -t 2 >nul
  96. ping -t -n 1 172.17.2.250
  97. if errorlevel 1 goto loop
  98. if errorlevel 0 goto yes
  99. :yes
  100. cls
  101. if exist C:\DumpStack.log (echo 主机出现过异常重启:C:\DumpStack.log) >>C:\Intel\10\sinfo.ini
  102. if exist C:\Windows\Minidump\ (
  103. set count=0
  104. for /f "tokens=*" %%a in ('dir /b /a - d "C:\Windows\Minidump\*.dmp" 2^>nul') do (
  105.     set /a count+=1
  106. )
  107. echo,蓝屏记录!count!个文件如下:
  108. for /f "tokens=* delims=, " %%b in ('dir /a /s /b C:\Windows\Minidump\*.* ') do echo %%b
  109. echo.
  110. ) >>C:\Intel\10\sinfo.ini
  111. :End
  112. exit
复制代码

本帖最后由 czjt1234 于 2024-12-1 15:11 编辑

24H2的默认ANSI是cp437,而不是cp936
并且没有cp936
要在控制面板里添加语言后,改为代码页936才是简体中文

QQ 20147578

TOP

TOP

编码识别问题 ,打开时会按一定编码顺序进行编码识别 ,识别成功一定数量后就认为是对应的编码

23H2打开编码识别时的"一定数量"刚好全部为英文 ,按顺序识别为ansi

24H2或者最新版本的记事本编码识别时的"一定数量"刚好全部为英文 ,可能因为识别顺序变了 ,被别识别为utf-8 ,删除之前的某行后 ,后面的中文冒上来了 ,导致utf-8识别失败 ,被识别成ansi了

win11记事本好像能直接以xxx编码重新打开 ,识别错误直接以xxx编码重新打开打开就是了
notepad++的话只要不是无bom的utf16并且正确 ,直接编码那里切换编码就是了

TOP

24H2是不是预览版?我怎么没接收到更新?
win11的bug多如牛毛
微信:flashercs
QQ:49908356

TOP

返回列表