Windows bat:如何处理每个子目录的文件

时间:2017-06-07 09:04:14

标签: windows batch-file cmd

我需要使用名为here.bat的蝙蝠来处理相同目录中的文件。这是一个例子:

mydir
 |----mybat.bat
 |----here.bat
 |----subdir
        |-----subdir2
                 |-----subdir3
                          |-----subdir31
                          |        |-----a.jpg
                          |
                          |-----subdir32
                                   |-----b.jpg

我需要使用here.bat来处理a.jpgb.jpg。所以我写了一个名为mybat.bat的bat文件,如下所示:

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion

For /d %%A in (.\subdir\*) Do (
  Set "Files="
  For /F "delims=" %%B in ('dir /S /B "%%~fA\*.jpg"') Do Set Files=!Files! "%%~fB"
  If defined Files echo call here.bat !Files!
)

pause

当我执行mybat.bat时,我得到如下结果:

call here.bat "C:\Users\me\mydir\subdir\subdir2\subdir3\subdire31\a.jpg" "C:\Users\me\mydir\subdir\subdir2\subdir3\sudbir32\b.jpg"

但这不是我需要的。我需要处理与jpg位于同一目录中的here.bat个文件,如果它们不在同一个目录中,则应单独处理它们。这意味着我需要如下结果:

call here.bat "C:\Users\me\mydir\subdir\subdir2\subdir3\subdire31\a.jpg"
call here.bat "C:\Users\me\mydir\subdir\subdir2\subdir3\sudbir32\b.jpg"

1 个答案:

答案 0 :(得分:0)

您不断变化的要求使得在第一次运行中难以提供解决方案。这个版本应该:

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
for /R ".\subdir" %%A in (.) do (
  Set "Files="
  If Exist "%%~fA\*.jpg" For /F "delims=" %%B in (
      'dir /B "%%~fA\*.jpg"') Do Set Files=!Files! "%%~fB"
  If defined Files echo call here.bat !Files!
)
pause