从“for /f”循环内部调用时 chcp 不起作用

问题描述 投票:0回答:1

我有一个脚本可以从 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 仍然报告代码页已更改。当它从同一个循环内部调用但被包装在子例程中时发生了什么变化?

batch-file cmd
1个回答
0
投票

只是一个电话而已!
即使调用空函数它也能工作

@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
© www.soinside.com 2019 - 2024. All rights reserved.