Batch file 修改循环变量cmd
我想做的事情是从包含各种视频文件名的文本文件中筛选出特定的视频文件扩展名,例如filename.txt内容Batch file 修改循环变量cmd,batch-file,cmd,Batch File,Cmd,我想做的事情是从包含各种视频文件名的文本文件中筛选出特定的视频文件扩展名,例如filename.txt内容 Red.mp4 Yellow.mp4 Blue.mp4 Orange.wmv Purple.wmv 现在,我将只为.mp4解析这个文件&使用“for parameter”生成几个文件,每个文件都包含特定文件的特定代码。换句话说,将创建与filename.txt我的代码中的.mp4视频数量相同的文件数量 ::== @echo off setLocal EnableDelayedExpans
Red.mp4
Yellow.mp4
Blue.mp4
Orange.wmv
Purple.wmv
现在,我将只为.mp4解析这个文件&使用“for parameter”生成几个文件,每个文件都包含特定文件的特定代码。换句话说,将创建与filename.txt我的代码中的.mp4视频数量相同的文件数量
::==
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('type filename.txt ^|findstr ".mp4"') do (
set /a n+=1
echo >myfile!n!.txt
set v!n!=x264 --crf 23 --level 3.1 --tune film --o "%%a" "%%a.mkv"
)
set v
pause
::==
我有两个问题:
我认为没有必要创建一个带有一个循环的变量数组,然后在第二个循环中将内容添加到文件中。只需在一个循环中完成所有操作 此外,不需要创建空文件,并且您的尝试不正确-它会在每个文件中添加一行
ECHO关闭。
。要回显空行,应使用>filename echo(
)创建空文件,请使用copy num filename
这不太可能是一个问题,但文件名可能包含!
。如果启用延迟扩展,则包含!
的for变量的扩展将损坏。可以通过在循环中打开和关闭延迟扩展来解决此问题,但还有另一个解决方案:使用另一个FINDSTR命令用行号结束每一行,然后用FOR循环解析行号和文件名。这样就不需要增加计数器,也不需要延迟扩展
变量修饰符的~n
用于获取不带扩展名的名称
@echo off
for /f "tokens=1* delims=:" %%A in (
'findstr /lie ".mp4" filename.txt^|findstr /n "^"'
) do (
>"myfile%%A.txt" echo x264 --crf 23 --level 3.1 --tune film --o "%%B" "%%~nB.mkv"
)
我建议使用
echo.>filename
来回送空行。它比其他选项更容易阅读。