我正在尝试使用 ESC 代码在脚本中添加文本着色,以对文件列表中的视频文件进行批处理。
在下面的代码第 29 行中,ffmpeg 代码导致后面的着色被取消。如果我删除 ffmpeg 代码,所有着色都会完美。请大家看看问题出在哪里。
@echo off
REM Change the console encoding to UTF-8 (for Nordic characters).
chcp 65001
set filelist=%1
setlocal enabledelayedexpansion
REM Define ESC escape character
for /f %%d in ('echo prompt $E ^| cmd') do (set "ESC=%%d")
for /f "usebackq tokens=*" %%a in ("%filelist%") do (
set Bytes=%%~za
set MB=!Bytes:~0,-6!
set Timestamp=%%~ta
set TSYYYY=!Timestamp:~6,4!
set TSYY=!Timestamp:~8,2!
set TSMM=!Timestamp:~3,2!
set TSDD=!Timestamp:~0,2!
set TSHR=!Timestamp:~11,2!
set TSMIN=!Timestamp:~14,2!
set TSDato=!TSYY!!TSMM!!TSDD!
set TSTid=!TSHR!!TSMIN!
echo !ESC![33mConvert and compress !Bytes! Bytes sized %%~xa file to .MP4!ESC![0m
REM Problem area. Below ffmpeg command cancels using ESC color codes. If REMed out, coloring works perfectly.
ffmpeg -hide_banner -loglevel quiet -i "%%~da%%~pa%%~na%%~xa" -vcodec libx265 -crf 28 "%%~da%%~pa%%~na_!TSDato!-!TSTid!.mp4"
REM Clean up. If new file created, delete original file
if exist "%%~da%%~pa%%~na_!TSDato!-!TSTid!.mp4" (del "%%~da%%~pa%%~na%%~xa")
echo !ESC![42mSummary!ESC![0m
echo !ESC![34mInputfile="%%~a"!ESC![0m
echo !ESC![32mOutputfile="%%~da%%~pa%%~na_!TSDato!-!TSTid!.mp4"!ESC![0m
echo !ESC![42mFile "%%~na" optimisation complete!ESC![0m
pause
)
echo.
echo All files optimised!
某些程序在执行期间内部更改 chcp,并且在此执行/更改之前不会返回定义活动 chcp。
请注意,我并不是说这是导致(您的)问题的原因,并且我也没有忽略其他一些原因,但是如果运行 ffmpeg 后,您再次激活 chcp 65001,它也可能有效,因为在我的测试中问题是在这里解决了。
我在Windows 10上,出现了同样的问题,这样就解决了。如果它为您解决了问题,请告诉我。