如何在文件夹和子文件夹中执行批处理文件执行脚本?

Posted

技术标签:

【中文标题】如何在文件夹和子文件夹中执行批处理文件执行脚本?【英文标题】:how to do batch file execute script in folders and subfolders? 【发布时间】:2019-06-04 08:28:59 【问题描述】:

我正在创建一个批处理文件,用于转换文件(jpg、png、gif)并在我找到它的某个文件夹中输出新文件。我问用户文件的路径,所以脚本需要扫描目录和子目录并执行脚本,但是当脚本进入其他文件夹时,脚本停止工作......

这是我的批处理文件:

set /p folderScan=Enter folder path:

cd %folderScan%

call :searchInFolder
goto :eof

:searchInFolder
for %%f in (*.png *.jpg *.gif) do (
    "%~dp0\myconverter.exe" "%CD%\%%f" -o "%CD%\%%~nf.newextension"
)

for /D %folderScan% in (*) do (
    cd %%d
    :searchInFolder
)

pause

当脚本进入for /D...并找到一个文件夹并访问它时,该文件夹内的文件不会被脚本处理...

我需要扫描所有文件夹和子文件夹,当我处理完一个文件夹内的文件后,我需要移动到下一个文件夹,如果该文件夹内有文件夹,则该文件夹已被访问,脚本需要访问也到它并处理文件,如下所示:

|D:\Desktop\Images
|_Car
|__Red
|__Blue
|___Dark Blue
|_Bike
|_Animals
|__Dog
|__Cat
|_Games
|__Race
|___Bike
|___Cars

【问题讨论】:

【参考方案1】:

您不需要两个不同的for 循环(一个用于文件夹,另一个用于文件)。 for /R 可以递归处理文件:

for /R "%folderScan%" %%f in (*.png *.jpg *.gif) do ( 
  "%~dp0\myconverter.exe" "%%~ff" -o "%%~dpnf.newextension"
)

【讨论】:

以上是关于如何在文件夹和子文件夹中执行批处理文件执行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

Windows-执行python脚本(bat批处理)

Linux中shell和子shell一点点理解

如何将 cx_Freeze 可执行文件的 .pyd 和子文件夹与可执行文件分开放在一个文件夹中

如何使用批处理脚本对目录中的每个文件执行某些操作

Windows 批处理脚本指南: 日志

自动化批处理文件和PowerShell脚本执行