Windowsbatch file循环通过目录处理文件?
好吧,我是一名PHP程序员,不幸的是,由于我不会公布简短的原因,我需要编写/使用batch file,为我处理一些图像。
我有一个文件夹充满了嵌套的文件夹,每个这些嵌套的文件夹里面还有一个包含多个TIF图像的文件夹,每个文件夹中的图像数量各不相同。 我也有一个batch file,让我们称之为ProcessImages.bat为Windows,你可以“放”这些TIF文件(或显然在调用蝙蝠时在命令行列表中指定它们); 在此基础上创build一个新的文件夹与我所有的image processing基于我有一个EXE。
好处是,因为bat文件使用了从“drop”到它的文件夹的path,所以我可以select一个文件夹的所有TIF并放下它来完成处理…但是当我继续手动执行此操作我有300多个TIF文件夹,我发现它让我的系统变得如此令人难以置信,如果我只能一次处理这些文件(不需要手工操作),那将是美好的。
所有这些说…有人可以指向我的方向正确的方向(对于Windows蝙蝠文件AMATEUR)以一种方式我可以写一个Windows bat脚本,我可以从一个目录中调用,并通过所有目录该目录…并在每一组图像上运行我的处理batch file?
提前致谢!
泰勒
您可以在Batch中编写recursionalgorithm,使您可以精确控制每个嵌套子目录中的操作:
@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
Aacini的解决scheme的工作原理,但你可以在一行:
for /R %%f in (*.tif) do echo "%%f"
我知道这不是recursion(通过枚举子目录迭代?),但它可能对一些应用程序更好:
for /F "delims=" %%i in ('dir /ad /on /b /s') do ( pushd %%i dir | find /i "Directory of" popd )
用你可能需要的任何命令replace第三行。
目录/广告 – 只列出目录
很酷的东西是pushd不需要引号如果path中的空间。
在这里发表,因为它似乎是这个案件最受欢迎的问题。
这是一个老的gem,我终于设法find在互联网上: sweep.exe 。
它在当前目录和所有子目录中执行提供的命令,就这么简单。
假设你有一些程序处理一个目录中的所有文件(但是用例比这个更广泛):
For example, a file C:\Commands\processimages.cmd which contains: FOR %%f IN (*.png) DO whatever
所以,你想在当前目录和所有子目录下运行这个程序:
:: Put sweep.exe in your PATH, you'll love it! C:\ImagesDir> sweep C:\Commands\processimages.cmd :: And if processimages.cmd is in your PATH too, the command becomes: C:\ImagesDir> sweep processimages
优点:你不必改变你的原始程序,使其处理子目录。 只有在需要时才可以select处理子目录。 而且这个命令使用起来非常简单而且令人愉快。
骗子:可能会失败,一些命令(包含空格,引号,我不知道)。 例如看到这个线程 。