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

[文件操作] [分享]批处理把UTF-8(有BOM或无BOM)编码文件转换成ANSI编码

[复制链接]
发表于 2023-11-10 22:59:28 | 显示全部楼层
回复 4# Batcher


    抄了下你的代码和内容、、、

以下代码以ANSI编码保存为 ChangeCoding.ps1 放在 C:\Test\U2A 文件夹下:

  1. $byte =[io.file]::ReadAllBytes($Args[0])

  2. $d=[Text.DecoderReplacementFallback]::new('?')
  3. $e=[Text.EncoderReplacementFallback]::new('?')
  4. $cgbk=[text.encoding]::GetEncoding(936,$e,$d)
  5. $cutf8=[text.encoding]::GetEncoding(65001,$e,$d)

  6. $StrEncode='ANSI'

  7. if($byte.length -le 512){$l=$byte.length} else{$l=512}
  8. echo "test $l bytes"

  9. if ($byte[0] -eq 0xEF -and $byte[1] -eq 0xBB){
  10. $StrEncode='UTF-8BOM'
  11. } else{
  12. $b=$cgbk.GetBytes($cgbk.GetString($byte,0,$l))
  13. if($l -eq 512){$l-=16}
  14. for($i=0;$i -lt $l;$i++){
  15. if($b[$i] -ne $byte[$i] ){$StrEncode='UTF-8';break}
  16. }
  17. }

  18. echo "maybe $StrEncode"

  19. if($StrEncode -eq 'UTF-8BOM'){
  20. echo "convert $StrEncode to ANSI"
  21. [io.file]::WriteAllText($Args[1],$cutf8.GetString($byte,3,$byte.length-3),$cgbk)
  22. }
  23. if($StrEncode -eq 'UTF-8'){
  24. echo "convert $StrEncode to ANSI"
  25. [io.file]::WriteAllText($Args[1],$cutf8.GetString($byte,0,$byte.length),$cgbk)
  26. }
  27. if($StrEncode -eq 'ANSI'){}
  28. echo "`r`n"
复制代码
以下代码以ANSI编码保存为 Run.bat 放在 C:\Test\U2A 文件夹下:
执行 Run.bat 脚本即可。

  1. @echo off
  2. cd /d "%~dp0"
  3. set "FolderStageU=TempUTF8BOM"
  4. set "FolderOutA=FinalANSI"
  5. md "%FolderStageU%" 2>nul
  6. md "%FolderOutA%" 2>nul
  7. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  8. echo %%a
  9. powershell -ExecutionPolicy bypass -f ChangeCoding.ps1 "%%~fa" "%~dp0%FolderOutA%\%%a"
  10. )
  11. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 11:39 , Processed in 0.016049 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表