【发布时间】:2016-08-16 06:44:04
【问题描述】:
考虑这个层次结构:
MainFolder\Sub_Folder1\Original_Files\
\Converted_Files\
\Sub_Folder2\Original_Files\
\Converted_Files\
现在在每个...\Original_Files\ 中,我都有一堆视频文件,我将对其进行编码并保存到各自的...\Converted_Files\。
我可以使用此批处理代码为一个子文件夹执行此操作:
@echo off
set "sourcedir=G:\Animation\Anime\OnePiece\Episodes\Main"
set "outputdir=G:\Animation\Anime\OnePiece\Episodes\Converted"
PUSHD "%sourcedir%"
for %%F in (*.mkv) DO ffmpeg -i "%%F" -s 640x480 -map 0 -c:v libx265 "%outputdir%\%%F"
POPD
我生成了一个包含所有子文件夹的文件夹路径的文本文件,其中包含:
G:\Animation\ToConvert\Berserk_1997_The_Complete_Series
G:\Animation\ToConvert\Blue_Exorcist
G:\Animation\ToConvert\Elfen_Lied
文件中列出的每个文件夹都包含Main 和Converted 文件夹。我必须遍历Main 中的所有文件并保存到Converted,如您在上面看到的那样。
这是我想出来的:
@echo off
for /F "tokens=*" %%A in (f.txt) DO (
set "sourcedir=%A%\Main"
set "outputdir=%A%\Converted"
PUSHD "%sourcedir%"
for %%F in (*.mkv) DO ffmpeg -i "%%F" -s 640x480 -map 0 -c:v libx265 "%outputdir%\%%F"
POPD
) %%A
运行 for /F "tokens=*" %A in (f.txt) DO @echo %A 会给我子文件夹的名称。
我想如果我可以将名称传递给某个变量并将\Main 和\Converted 连接到它,它可能会起作用。
但是在命令提示符窗口中运行上面的代码时,它只是将当前目录从我正在运行批处理文件的文件夹切换到C:\Windows。
如何运行嵌套循环,一个用于子文件夹,然后在Main 中工作和在Converted 中保存以及Main 中文件的下一个循环之间进行选择?
【问题讨论】:
-
对于您的任务,我将使用两个嵌套的
for /D循环来迭代主文件夹中的两个目录级别,然后使用标准的for循环来迭代*.mkv文件...您在单个代码块中编写和读取相同变量时需要delayed expansion 的最后一个脚本... -
@aschipfl 你能分享代码吗,因为我不知道批处理编程。我所做的只是谷歌搜索和混合匹配的语法!!!!!!
标签: batch-file cmd batch-processing nested-loops