在 Windows CMD FOR 循环中使用 youtube-dl 去除非 ASCII 字符

cra*_*ear 2 windows for-loop cmd batch-file youtube-dl

直接在 CMD 中使用 youtube-dl 运行命令按预期工作:

youtube-dl -e "https://www.youtube.com/watch?v=E_JXrNAxGzM"

它正确地给出了 Youtube 视频的标题:27/12/2016 ???? ?????????

但是,如果我使用 FOR 循环在 Windows 批处理文件中使用相同的命令,则会完全删除非 ASCII 字符。批处理文件代码:

@ECHO OFF
FOR /F "delims=" %%i IN ('youtube-dl -e "https://www.youtube.com/watch?v=E_JXrNAxGzM"') DO (
ECHO %%i
)
PAUSE
EXIT
Run Code Online (Sandbox Code Playgroud)

只给出这个结果:27/12/2016

作为测试,我试过这个:

set var=????????????

for %%i in (%var%) do (
echo %%i
)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常并正确响应汉字,这让我相信这不是 CMD 中的 Unicode 问题,而是与 youtube-dl 有某种联系。

但是,我确信这不是 youtube-dl 问题

有什么我想念的东西吗?有什么办法可以让它发挥作用吗?

dxi*_*xiv 5

--encoding utf-8开关似乎在这里工作chcp 65001(免责声明:仅在 win10 v1909 下尝试使用非旧控制台使用 NSimSun 字体,ymmv 使用其他版本或设置)。

C:\etc>chcp 65001
Active code page: 65001

C:\etc>for /f "delims=" %i in ('youtube-dl --encoding utf-8 -e "https://www.youtube.com/watch?v=E_JXrNAxGzM"') do @echo %i
27/12/2016 ???? ????????
Run Code Online (Sandbox Code Playgroud)

________

但是,我确信这不是 youtube-dl 问题。

真正要问开发人员的问题是,是否youtube-dl对发送到交互式控制台的输出流与管道或重定向进行了任何检测,以及它是否会根据该检测更改输出编码。我相信答案可能是肯定的,这可以解释直接控制台输出与for循环之间的区别。