gpt4 book ai didi

Windows Batch,调用另一个批处理时的循环和文件属性

转载 作者:可可西里 更新时间:2023-11-01 09:28:25 26 4
gpt4 key购买 nike

我最近开始将我所有的视频文件转换为 MP4 以用于流式传输,并且到目前为止使用批处理没有问题。现在我有 6000 多个视频要转换,需要某种我可以操纵的队列系统。

这是我当前的代码,用于将目录中的所有内容转换为单独文件夹中的命令。

@echo off
setlocal disabledelayedexpansion
set dirs=D:\ANIME E:\ANIME F:\ANIME
for %%a in (%dirs%) do (
echo %%a
pushd %%a
for /f "tokens=* delims= " %%f IN ('dir/b/s *.avi *.mkv *.m4v *.mpeg *.mpg') do (
echo D:\handbrake\HandBrakeCLI.exe -i "%%f" -e qsv_h264 -q 20 -E fdk_haac -B 196 -R Auto -D 0,0,0,0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback copy:* --subtitle=1 --subtitle-default --subtitle-forced --subtitle-burn -o "%%~dpf%%~nf.mp4" > "D:\batch\%%~nf.bat"
echo del /F "%%f" >> "D:\batch\%%~nf.bat"
)
)

这很好用,让我可以调用 1000 个 bat 文件,这就是问题所在。许多文件都有特殊字符,如 !在他们的名字中弄乱了我用来循环这些的 for 循环。我在处理之前将文件设置为只读,因此我的其他批处理不会尝试转换同一个文件(我一次运行 3 个)。

我找到了一个使用 ENABLEDELAYEXPANSION 的解决方法,但在几次循环后我会收到错误消息说我超出了最大调用数。

@echo off
setlocal enableextensions
echo Starting loop
goto loop

:loop
for %%f in (D:\batch\*.bat) do (
set ATTRIBS=%%~af
setlocal enabledelayedexpansion
set READ_ATTRIB=!ATTRIBS:~1,1!
if !READ_ATTRIB!==- (
setlocal disabledelayedexpansion
attrib +R "%%f"
call "%%f"
)

timeout /t 2 /nobreak
goto loop
)
endlocal

通常你会说只要改变! % 变量并删除 delayedexpansion,但这让我在获取文件属性时出错。

set READ_ATTRIB=%ATTRIBS:~1,1%
if %READ_ATTRIB%==- (

不会给我任何结果并且错误 ( 是意外的如果我回显 READ_ATTRIB,结果将始终为 ~1,1,当回显其他人时,我将得到 ECHO IS OFF。

有什么方法可以不使用 delayedexpansion 或者在几次循环后我不会出错?

最佳答案

32 is the deepest level of setlocal when used in batch file .您需要使用 setlocal - endlocal 对类似于一对 ( 左和 ) 右括号。请参阅下面大写的 ENDLOCAL

@echo off
setlocal enableextensions
echo Starting loop
goto loop

:loop
for %%f in (D:\batch\*.bat) do (
set ATTRIBS=%%~af
setlocal enabledelayedexpansion
set READ_ATTRIB=!ATTRIBS:~1,1!
if !READ_ATTRIB!==- (
setlocal disabledelayedexpansion
attrib +R "%%f"
call "%%f"
ENDLOCAL
)
ENDLOCAL
timeout /t 2 /nobreak
REM this was totally mazy: goto loop
)
endlocal

此外,原始代码中的后一个 goto loop 导致 for %%f 循环针对同一数据集无限期地初始化,即 %循环体中的 %f 始终引用唯一的文件。请参见大写的 REM

关于Windows Batch,调用另一个批处理时的循环和文件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33952288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com