5个回答
展开全部
转换文本编码,需先指定转换前编码类型和转换后编码类型
从问题可知,转换后指定编码类型为ANSI(不是ANST)
:: By LJ_SunTB【百度知道 BAT-GO 团】
::示例将原配置文件编码由UTF-8转换为ANSI(GB2312)
::code1=ANSI(GB2312)
::code2=Big5
::code3=Shift_JIS
::code4=EUC-KR
::code5=UTF-8
::code6=Unicode
@echo off & setlocal enabledelayedexpansion
::设置文件转换前编码类型,请参考上面编码序号,序号5即指code5也就是UTF-8编码
set aaa=5
::设置文件转换后编码类型,请参考上面编码序号,序号1即指code1也就是ANSI(GB2312)编码
set bbb=1
::设置要转换的文件名
set file=test.txt
set wfiles=%file%
::开始转换
echo !aaa!|findstr /be "[1-6]" >nul ||goto :eof
echo !bbb!|findstr /be "[1-6]" >nul ||goto :eof
if "!aaa!" == "!bbb!" goto :eof
echo>MakeBOM.vbs Set objFSO = CreateObject("Scripting.FileSystemObject")
echo>> MakeBOM.vbs Set objFile = objFSO.CreateTextFile("Unicode.BOM",,true)
cscript //Nologo MakeBOM.vbs
set codepth=编码转换后
md %codepth%\tmp
:loop
set vvv=!aaa!
if "!aaa!" == "6" set vvv=!bbb!
for /f "tokens=%vvv%" %%a in ("936 950 932 949 65001") do (reg add "HKCU\Console\%%SystemRoot%%_System32_cmd.exe" /v CodePage /t REG_DWORD /d %%a /f >nul)
if not "!aaa!" == "6" (
if not "!bbb!" == "6" (
start /wait /min cmd /u /c "for %%a in (%%wfiles%%) do copy Unicode.BOM tmpfile.tmp&type "%%~fa" >> tmpfile.tmp&move /y tmpfile.tmp %codepth%\tmp\"%%~nxa""
set aaa=6
set wfiles=%codepth%\tmp\*
goto loop
)
)
if "!bbb!" == "6" (
start /wait /min cmd /u /c "for %%a in (%%wfiles%%) do copy Unicode.BOM tmpfile.tmp&type "%%~fa" >> tmpfile.tmp&move /y tmpfile.tmp %codepth%\"%%~nxa""
) else (start /wait /min cmd /c "for %%a in (%%wfiles%%) do type "%%~fa" > %codepth%\"%%~nxa"")
reg delete "HKCU\Console\%%SystemRoot%%_System32_cmd.exe" /v CodePage /f >nul
del MakeBOM.vbs
del Unicode.BOM
move /y "%codepth%\%file%" "%file%"
rd /s /q "%codepth%"
从问题可知,转换后指定编码类型为ANSI(不是ANST)
:: By LJ_SunTB【百度知道 BAT-GO 团】
::示例将原配置文件编码由UTF-8转换为ANSI(GB2312)
::code1=ANSI(GB2312)
::code2=Big5
::code3=Shift_JIS
::code4=EUC-KR
::code5=UTF-8
::code6=Unicode
@echo off & setlocal enabledelayedexpansion
::设置文件转换前编码类型,请参考上面编码序号,序号5即指code5也就是UTF-8编码
set aaa=5
::设置文件转换后编码类型,请参考上面编码序号,序号1即指code1也就是ANSI(GB2312)编码
set bbb=1
::设置要转换的文件名
set file=test.txt
set wfiles=%file%
::开始转换
echo !aaa!|findstr /be "[1-6]" >nul ||goto :eof
echo !bbb!|findstr /be "[1-6]" >nul ||goto :eof
if "!aaa!" == "!bbb!" goto :eof
echo>MakeBOM.vbs Set objFSO = CreateObject("Scripting.FileSystemObject")
echo>> MakeBOM.vbs Set objFile = objFSO.CreateTextFile("Unicode.BOM",,true)
cscript //Nologo MakeBOM.vbs
set codepth=编码转换后
md %codepth%\tmp
:loop
set vvv=!aaa!
if "!aaa!" == "6" set vvv=!bbb!
for /f "tokens=%vvv%" %%a in ("936 950 932 949 65001") do (reg add "HKCU\Console\%%SystemRoot%%_System32_cmd.exe" /v CodePage /t REG_DWORD /d %%a /f >nul)
if not "!aaa!" == "6" (
if not "!bbb!" == "6" (
start /wait /min cmd /u /c "for %%a in (%%wfiles%%) do copy Unicode.BOM tmpfile.tmp&type "%%~fa" >> tmpfile.tmp&move /y tmpfile.tmp %codepth%\tmp\"%%~nxa""
set aaa=6
set wfiles=%codepth%\tmp\*
goto loop
)
)
if "!bbb!" == "6" (
start /wait /min cmd /u /c "for %%a in (%%wfiles%%) do copy Unicode.BOM tmpfile.tmp&type "%%~fa" >> tmpfile.tmp&move /y tmpfile.tmp %codepth%\"%%~nxa""
) else (start /wait /min cmd /c "for %%a in (%%wfiles%%) do type "%%~fa" > %codepth%\"%%~nxa"")
reg delete "HKCU\Console\%%SystemRoot%%_System32_cmd.exe" /v CodePage /f >nul
del MakeBOM.vbs
del Unicode.BOM
move /y "%codepth%\%file%" "%file%"
rd /s /q "%codepth%"
展开全部
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行
<# :
cls
@echo off
rem 将多个txt由UTF-8编码转化为ANSI编码
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$path=$args[0];
$oldenc=[Text.Encoding]::UTF8;
$newenc=[Text.Encoding]::Default;
$newfolder=$path+'#result';
if(-not (test-path -liter $newfolder)){[void](md $newfolder)};
$files=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
write-host $files[$i].Name;
$text=[IO.File]::ReadAllText($files[$i].FullName, $oldenc);
$newfile=$newfolder+'\'+$files[$i].Name;
[IO.File]::WriteAllText($newfile, $text, $newenc);
}
<# :
cls
@echo off
rem 将多个txt由UTF-8编码转化为ANSI编码
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$path=$args[0];
$oldenc=[Text.Encoding]::UTF8;
$newenc=[Text.Encoding]::Default;
$newfolder=$path+'#result';
if(-not (test-path -liter $newfolder)){[void](md $newfolder)};
$files=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
write-host $files[$i].Name;
$text=[IO.File]::ReadAllText($files[$i].FullName, $oldenc);
$newfile=$newfolder+'\'+$files[$i].Name;
[IO.File]::WriteAllText($newfile, $text, $newenc);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有工具的,可以批量转换,非常方便的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要用批处理来解决文本编码的问题时,我通常推荐大家使用一个小巧的第三方工具wfr来实现。
百度搜索“ 白杨 免费”就可下载和查看使用说明。有需要再追问吧。
百度搜索“ 白杨 免费”就可下载和查看使用说明。有需要再追问吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还是用小工具来的实用些,可以用飞梭飞梭TXT文本数据处理百宝箱,它里面有个编码转换小工具。处理速度非常快,在多特,天空等网站上可以下载。这个工具是免费的,如果不会使用,在它的官方网站:郑州易网科技上有教程。也可以问我。哦…… 这个软件是免费的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询