【问题标题】:FORFILES no longer recursive when used with FOR loopFORFILES 与 FOR 循环一起使用时不再递归
【发布时间】:2016-04-11 02:56:21
【问题描述】:

我在批处理文件 (Windows) 中有以下代码。它返回目录中每个.jpg 文件的路径列表。然后将该列表传递给 ImageMagick Convert 函数(不是 Windows 转换函数)以创建 pdf。

echo moving CMD to drive location at %~dp1
CD /d %~dp1

echo getting the list of file names
FORFILES /p %~dp1 /s /m "*.jpg" /C "cmd /c echo @path" > files.txt

echo creating the pdf using ImageMagick
convert @files.txt test.pdf

这适用于返回 jpg 图像数据或其他单一文件类型。我需要它来搜索多种图像文件类型,我已经看到了 this 示例解决方案,您可以将 FORFILES 放入 FOR 循环中。

for %%G in ( .jpg , .tif ) do FORFILES /p %~dp1 /s /m "*.jpg" /C "cmd /c echo @path" > files.txt

但如果我这样做,程序就不再是递归的了。 forfiles 中的 /s 不再有效。

我已经尝试过FOR /R,但它不能处理带有空格的文件夹名称,我需要这样做。

关于如何保持这种递归性并且不会对带有空格的文件夹名称有任何想法?

【问题讨论】:

  • for /r 列出整个文件名,因此只需将变量用引号括起来或使用for /F "usebackq tokens=*" %a in ('%a')

标签: windows batch-file for-loop recursion spaces


【解决方案1】:

@Lưu Vĩnh Phúc

感谢您的回复。我尝试了你所说的,但是 For /F 在它认为 .jpg 是一个文件并且找不到它的地方抛出了一个错误。

你确实强迫我尝试新事物,这样做我认为问题在于我的语法。我将代码更改为:

FOR %%G in (.jpg, .tif) do FORFILES /p %~dp1 /s /m *%%G /C "cmd /c echo @path" >> files.txt

我删除了 /r 或 /f 并将变量从 for 循环添加到 forfiles 循环。

这保持了它的递归性质,并且只返回 for 循环中列出的文件类型。

【讨论】:

  • 实际上,这对我不起作用。如果路径以 \ 结尾且%~dp1 始终以 \ 结尾,则 FORFILES /M 选项不起作用。只有当我使用/m %~dp1.时它才有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多