嵌套的forfiles:路径和扩展名过滤器

4

有没有可能嵌套两个forfile命令,这样我就可以通过路径名扩展名进行过滤,然后只在这些双重筛选的文件上运行命令?

例如,我想获取所有用户的Outlook HTML签名。 我可以通过以下方式完成:

forfiles /s /p c:\Users /m *Signatures* /c "cmd /c forfiles /s /p @path /m *.htm"

这将仅显示文件名,因为forfiles的默认行为是调用cmd /c echo @file

更改此设置无效,因为我需要在内部的forfiles命令中设置/c-选项,这需要在引号中设置命令,从而导致双引号:

forfiles /s /p c:\Users /m *Signatures* /c "cmd /c forfiles /s /p @path /m *.htm /c "cmd /c echo @path""

如何避免内部引号或使用其他方法运行由路径子字符串和文件扩展名过滤的所有文件上的任何命令?

敬礼
sc911

[编辑]忘记了递归搜索的/s [/编辑]

2个回答

7

除了forfiles之外,您还可以使用两个嵌套的FOR命令。

请参阅以下单行示例,在cmd提示符下进行测试。

@for /d %d in (c:\Users\*signature*) do @for %f in (%d\*.htm) do @echo %f

使用此代码作为批处理文件中包含的骨架

for /d %%d in (c:\Users\*signatures*) do (
  for %%f in (%%d\*.htm) do (
    echo %%f
  )
)  

谢谢,这也可以解决问题,但我想坚持使用forfiles。 - sc911
@sc911,这个解决方案将比使用CMD.exeFORFILES更快地处理您的文件。 - Squashman

2

FORFILES似乎能够识别\"作为转义符,用于转义内部的"。因此,以下代码应该可以正常工作:

forfiles /p c:\Users /m *Signatures* /c "cmd /c forfiles /p @path /m *.htm /c \"cmd /c echo @path\""

我以为我已经尝试了所有的小恶心转义字符...非常感谢! - sc911

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接