Windows批处理文件通过目录循环处理文件?

Tyl*_*ler 39 windows recursion batch-file

好的,我是一名PHP程序员,不幸的是,由于我不会为了简洁而宣布的原因,我需要编写/使用批处理文件为我处理一些图像.

我有一个装满嵌套文件夹的文件夹,每个嵌套文件夹中都有一个包含多个TIF图像的文件夹,每个文件夹中的图像数量各不相同.我也有一个批处理文件,让我们称它为ProcessImages.bat for Windows,你可以"删除"这些TIF文件(或者显然在调用bat时在命令行列表中指定它们); 在它上面创建一个新文件夹,我的所有图像都基于我拥有的EXE进行处理.

好处是,因为bat文件使用你"删除"它的文件夹中的路径,我可以选择一个文件夹的所有TIF并将其删除以进行处理......但是当我继续手动执行此操作时我有300个左右的TIF文件夹我发现它让我的系统陷入困境如此令人难以置信,如果我一次只能处理这些文件(不用手动操作),那就太棒了.

所有这一切...有人指出我正确的方向(对于Windows bat文件AMATEUR),我可以编写一个Windows bat脚本,我可以从目录内部调用并让它遍历包含在内的所有目录那个目录......并且每次在一组图像上运行我的处理批处理文件?

提前致谢!

泰勒

Aac*_*ini 89

您可以在Batch中编写一个递归算法,它可以精确控制您在每个嵌套子目录中执行的操作:

@echo off
call :treeProcess
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
for %%f in (*.tif) do echo %%f
for /D %%d in (*) do (
    cd %%d
    call :treeProcess
    cd ..
)
exit /b
Run Code Online (Sandbox Code Playgroud)

  • @RobertPollak:你是对的!**`:)`**在这种情况下,最后一个`exit/B`也可以省略...... (3认同)
  • @阿西尼。您还可以解释/评论这些 /D、%%f 命令的作用吗?那太好了 ! (2认同)
  • 您可以从以下网址找到有关语法的更多信息.http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/for.mspx?mfr=true (2认同)

Jac*_*lan 61

Aacini的解决方案有效但您可以在一行中完成:

for /R %%f in (*.tif) do echo "%%f"
Run Code Online (Sandbox Code Playgroud)

  • 正如我所说,我的方法可以精确控制你在每个子目录中所做的事情.如果进程需要某个顺序(例如,先移动文件然后删除空子目录),就无法使用`for/R`来实现... (2认同)

Tom*_*sim 8

Jack 的解决方案最适合我,但我需要为网络 UNC 路径(cifs/smb 共享)执行此操作,因此需要稍作修改:

for /R "\\mysrv\imgshr\somedir" %%f in (*.tif) do echo "%%f"
Run Code Online (Sandbox Code Playgroud)

此方法的原始提示在这里