windows - 特殊字符导致 Windows 批处理文件关闭

标签 windows file batch-file handbrake

所以我创建了一个 Windows 批处理脚本来使用 HandbrakeCLI 转换视频

批处理脚本:

@echo off
::SET TO CURRENT CODE PAGE:::::::::::::::::::::::::::
FOR /F "tokens=4 delims= " %%G in ('chcp') DO (
chcp %%G >nul
) 
:::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal EnableExtensions
title AniCoder v2.5 by Nightsanity
color 0a
cd "%~d0%~p0"

::PREVENT MULTIPLE HANDBRAKE PROCESSES::::::::::::::::
set ignore=INFO:
for /f "usebackq" %%A in (`tasklist /nh /fi "imagename eq HandBrakeCLI.exe"`) do if not %%A==%ignore% (
exit
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::

::PREREQUISITES CHECK:::::::::::::::::::::::::::::::::
if not exist "HandBrakeCLI.exe" (
echo HandBrakeCLI is missing!
pause 
exit
)
if exist "Jobs.txt" del "Jobs.txt"
if not exist "ToConvert" mkdir "ToConvert"
if not exist "Converted" mkdir "Converted"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::

::CREATE A LIST OF VIDEOS TO CONVERT:::::::::::::::::::
for /F %%i in ('dir /s /b "ToConvert\*.*"') do (
dir/s/b "ToConvert\*" >> "Jobs.txt"
goto MAIN
)
goto NOFILES
:::::::::::::::::::::::::::::::::::::::::::::::::::::::

::LOOP THROUGH JOBS LIST AND CONVERT FILES:::::::::::::
:MAIN
for /f "tokens=* delims= " %%a in (Jobs.txt) do (
HandBrakeCLI -i "./ToConvert/%%~nxa" -f mp4 -o "./Converted/%%~na.mp4" -q 22 -e x264 -x cabac=0:ref=2:me=hex:bframes=0:weightp=0:subme=6:8x8dct=0:trellis=0 -E faac --mixdown mono -B 64 -X 480 -l 272 -s 1 --subtitle-burn -a 1
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::

::CLEAN UP FILES:::::::::::::::::::::::::::::::::::::::
if exist "Jobs.txt" del "Jobs.txt"
:Question
cls
echo Encode Done!
echo.
set DELFILES=
set /p DELFILES="Do you want to delete original files (Y/N)?:"
if "%DELFILES%" == "y" goto DELNOW
if "%DELFILES%" == "Y" goto DELNOW
if "%DELFILES%" == "n" goto ENDNOW
if "%DELFILES%" == "N" goto ENDNOW
goto Question
:DELNOW
if exist "ToConvert\*.*" del /Q "ToConvert\*.*"
:ENDNOW
endlocal
exit
:::::::::::::::::::::::::::::::::::::::::::::::::::::::

::WHEN NO FILES ARE INSIDE TOCONVERT FOLDER::::::::::::
:NOFILES
echo No video files found in:
echo ToConvert folder
echo.
pause
:::::::::::::::::::::::::::::::::::::::::::::::::::::::

HandbrakeCLI 引用: trac.handbrake.fr/wiki/CLIGuide

我遇到了一个问题,如果路径中有一个特殊字符,例如德语变音符号,它不会解释它或其他东西,因为它不会转换并关闭窗口。

我该如何解决这个问题?

运行 Windows 7 家庭高级版 Sp1

最佳答案

我建议你改变

for /F %%i in ('dir /s /b "ToConvert\*.*"') do (
 dir/s/b "ToConvert\*" >> "Jobs.txt"

for /F "delims=" %%i in ('dir /s /b "ToConvert\*.*"') do (
 echo(%%~dspnxi >> "Jobs.txt"

将短名称输出到jobs.tst

或许

 echo(%%~dspi%%~nxi >> "Jobs.txt"

可能会更好。

(无法测试 - 我没有可用的测试目录)

关于windows - 特殊字符导致 Windows 批处理文件关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377760/

相关文章:

wpf - 在 WPF 中实现 multidock 窗口系统(如 blend、visual studio)

linux - 为本地文件设置到期日期 - Windows/Linux

c++ - 在googlemock中模拟文件写入过程

python - python 意外的文件行为

c# - 如何以编程方式重新启动 Microsoft 测试代理?

batch-file - 在 Windows 上维护元数据和目录结构时,使用 FFmpeg 将 FLAC 递归转换为 MP3

c# - Windows WPF 中的垂直最大化

windows - Windows 10:使用2个麦克风而不混合输入

c++ - 以编程方式为任务计划程序创建/删除任务

windows - Dos 批处理脚本 - 用主文件递归替换文件实例(timthumb 漏洞利用预防)