我有一个脚本可以从 1251 代码页 (ansi) 转换为 866 代码页 (oem)。 它获取文件“ansi.txt”的内容,将其转换然后保存到“oem.txt”
@echo off
chcp 1251
for /f "tokens=*" %%a in (ansi.txt) do (
call :f_chcp 866
echo %%a >>oem.txt
call :f_chcp 1251
)
exit /b
:f_chcp
chcp %1 >nul
exit /b
效果很好。
但是如果我将“call :f_chcp 866”替换为“chcp 866 >nul”,则不会。在这种情况下,它使用代码页的先前值(1251)输出到文件。
谁能解释一下为什么? Chcp.com 是外部二进制文件。当它从“for /f”循环内部调用时,它怎么可能没有达到预期的效果。但是,chcp 仍然报告代码页已更改。当它从同一个循环内部调用但被包装在子例程中时发生了什么变化?
只是一个电话而已!
即使调用空函数它也能工作
@echo off
chcp 1251
for /f "tokens=*" %%a in (ansi.txt) do (
chcp 866
call :activate_chcp_effect
echo %%a >>oem.txt
chcp 1251
)
exit /b
:activate_chcp_effect
exit /b