Files
assist/convert_encoding.bat

95 lines
2.3 KiB
Batchfile
Raw Normal View History

@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul 2>&1
echo ========================================
echo 代码文件编码批量转换工具
echo ========================================
echo.
:: 设置要扫描的文件扩展名
set "extensions=*.py *.java *.js *.ts *.html *.css *.xml *.json *.md *.txt *.bat *.cmd *.ps1 *.sh *.yml *.yaml *.ini *.cfg *.conf *.properties"
:: 设置目标目录(默认为当前目录)
set "target_dir=%cd%"
if not "%~1"=="" set "target_dir=%~1"
echo 目标目录: %target_dir%
echo.
:: 检查目录是否存在
if not exist "%target_dir%" (
echo 错误:指定的目录不存在
pause
exit /b 1
)
:: 创建临时目录
set "temp_dir=%temp%\encoding_convert_%random%"
mkdir "%temp_dir%"
:: 统计变量
set "total_files=0"
set "converted_files=0"
set "skipped_files=0"
echo 开始扫描文件...
echo.
:: 遍历所有指定扩展名的文件
for %%e in (%extensions%) do (
for /r "%target_dir%" %%f in (%%e) do (
set /a total_files+=1
call :process_file "%%f"
)
)
echo.
echo ========================================
echo 转换完成
echo ========================================
echo 总文件数: %total_files%
echo 已转换: %converted_files%
echo 已跳过: %skipped_files%
echo.
:: 清理临时目录
rd /s /q "%temp_dir%" 2>nul
pause
exit /b
:process_file
set "file=%~1"
set "is_utf8=0"
:: 检查文件是否已经是UTF-8编码
powershell -Command "try { $content = [System.IO.File]::ReadAllText('%file%', [System.Text.Encoding]::UTF8); $content | Out-Null; exit 0 } catch { exit 1 }" >nul 2>&1
if %errorlevel% equ 0 set "is_utf8=1"
if %is_utf8% equ 1 (
echo [跳过] %file% (已经是UTF-8)
set /a skipped_files+=1
) else (
echo [转换] %file%
:: 尝试检测并转换编码
powershell -Command ^
"$path = '%file%'; ^
try { ^
$bytes = [System.IO.File]::ReadAllBytes($path); ^
$encoding = [System.Text.Encoding]::GetEncoding('GB2312'); ^
$content = $encoding.GetString($bytes); ^
[System.IO.File]::WriteAllText($path, $content, [System.Text.Encoding]::UTF8); ^
exit 0 ^
} catch { ^
exit 1 ^
}"
if %errorlevel% equ 0 (
set /a converted_files+=1
) else (
echo [警告] 无法转换 %file%
)
)
goto :eof