在每个子文件夹中递归迭代并运行批处理文件

时间:2018-08-06 10:49:50

标签: batch-file ffmpeg

请查看以下情形,其中文件夹A具有许多名称不同的子文件夹。这些子文件夹有n个文件,.jpg个,我正在尝试缩放和裁剪。

Folder A\
  SubFolder 01\*.jpg
  SubFolder 02\*.jpg
  .
  .
  .
  SubFolder xx\*.jpg

这些子文件夹具有不同的名称,并且在名称上没有趋势。

我创建了一个可缩放和裁剪图像的批处理文件。这很正常。我需要在每个SubFolder xx中运行以下命令(文件名:ScaleCrop.bat):

for %%I in (.) do set CurrDirName=%%~nxI
for %%a in ("*.JPG") do ffmpeg -i "%%a" -vf ^"scale=-1:260, crop=250:250^" "..\ScaledImages\%CurrDirName%\%%a.JPG"
for %%a in ("*.JPG") do ffmpeg -i "%%a" -vf ^"scale=260:-1, crop=250:250^" "..\ScaledImages\%CurrDirName%\%%a.JPG"
pause

该命令缩放并裁剪文件夹中的图像,并将这些文件保存到名为SacledImages的文件夹中,该文件夹也具有相同名称的子文件夹(SubFolder 01SubFolder 02,… ,SubFolderxx

我还创建了另一个.bat文件,用于将ScaleCrop.bat复制到每个子文件夹。

for /d %%a in ("C:\Users\Name\Desktop\Folder A\*") do copy " C:\Users\Name\Desktop\Folder A\ScaleCrop.bat" "%%a"

如何编写批处理文件,并从每个子文件夹运行ScaleCrop.bat

我尝试使用以下代码,但这仅在每个子文件夹中调用.bat file,但未执行:

for /f %%f in ('dir /ad /b') do start %%f\ScaleCrop.bat

我也尝试了以下方法,可以解决问题,但是由于缩放后的图像保存到/SacledImages文件夹而不是ScaledImages/SubFolderxx内,所有图像都被覆盖了:

for /r "C:\ Users\Name\Desktop\Folder A " %%a in (.) do (
  pushd %%a
for %%I in (.) do set CurrDirName=%%~nxI
for %%a in ("*.JPG") do ffmpeg -i "%%a" -vf ^"scale=-1:260, crop=250:250^" "..\ScaledImages\%CurrDirName%\%%a.JPG"
for %%a in ("*.JPG") do ffmpeg -i "%%a" -vf ^"scale=260:-1, crop=250:250^" "..\ScaledImages\%CurrDirName%\%%a.JPG"
pause
  popd 
  )

0 个答案:

没有答案