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

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

【问题描述】

C:\Test\U2A 文件夹下有多个txt文件,假设文本内容都是:
  1. bbs.bathome.net
  2. 批处理之家论坛
  3. www.bathome.net
复制代码
有一部分txt文件是ANSI编码。
有一部分txt文件是UTF-8编码。
有一部分txt文件是带有BOM的UTF-8编码。
要求全部转换成ANSI编码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

【解决方案】

以下代码以ANSI编码保存为 Run.bat 放在 C:\Test\U2A 文件夹下:
  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.     for /f "delims=" %%b in ('powershell -f CheckCode.ps1 "%%a"') do (
  10.         if "%%b" == "UTF-8BOM" (
  11.             powershell "[IO.File]::WriteAllLines('%FolderStageU%\%%a',(Get-Content '%%a' -Raw))"
  12.             iconv.exe -f UTF-8 -t GB2312 "%FolderStageU%\%%a" > "%FolderOutA%\%%a" 2>nul
  13.         ) else (
  14.             iconv.exe -f UTF-8 -t GB2312 "%%a" > "%FolderOutA%\%%a" 2>nul
  15.             if errorlevel 1 (
  16.                 iconv.exe -t GB2312 "%%a" > "%FolderOutA%\%%a"
  17.             )
  18.         )
  19.     )
  20. )
复制代码
以下代码以ANSI编码保存为 CheckCode.ps1 放在 C:\Test\U2A 文件夹下:
  1. function Get-FileEncoding {
  2.     [CmdletBinding()]
  3.     param (
  4.         [Parameter(Mandatory = $true)]
  5.         [ValidateScript({ Test-Path $_ })]
  6.         [string]$Path
  7.     )
  8.     $byte = Get-Content -Encoding Byte -ReadCount 2 -TotalCount 2 -Path $Path
  9.     if ($byte[0] -eq 0xEF -and $byte[1] -eq 0xBB) {
  10.         return 'UTF-8BOM'
  11.     } elseif ([System.Text.Encoding]::UTF8.GetString($byte) -match '[^\x00-\x7F]') {
  12.         return 'UTF-8'
  13.     } else {
  14.         return 'ANSI'
  15.     }
  16. }
  17. $StrEncode = Get-FileEncoding -Path $Args[0]
  18. Write-Host "$StrEncode"
复制代码
下载命令行工具 iconv.exe 放在 C:\Test\U2A 文件夹下:
http://bcn.bathome.net/s/tool/index.html?key=iconv

执行 Run.bat 脚本即可。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Five66


    能否把你使用PowerShell脚本完成相同功能的完整代码发出来给大家学习一下?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# hnfeng


    请把遇到问题的UTF-8_BOM文件上传到网盘,我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表