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

时间:2011-08-02 09:11:20

标签: windows command-line batch-file cmd

是否有可能嵌套两个forfile命令,以便我可以按路径名扩展名进行过滤,然后仅对那些经过双重过滤的命令运行命令文件?

通过示例,我想获得所有用户的所有Outlook HTML签名。我可以通过

来做到这一点
forfiles /s /p c:\Users /m *Signatures* /c "cmd /c forfiles /s /p @path /m *.htm"

但这只会显示文件名,因为调用forfilescmd /c echo @file的默认行为。

更改此方法不起作用,因为我需要在内部/c命令中设置forfiles - 选项,该选项需要在引号中设置命令,从而产生双引号:

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

如何转义内部引号或使用某种不同的方法对由路径的子字符串和文件扩展名过滤的所有文件运行任何命令?

亲切的问候是sc911

[edit]忘了/s进行递归搜索[/ edit]

2 个答案:

答案 0 :(得分:7)

您可以使用两个嵌套的forfiles命令代替FOR

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

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

并使用此代码作为骨架包含在BAT文件中

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

答案 1 :(得分:2)

FORFILES似乎能够将\"识别为逃避内部"的方式。因此,以下内容应该有效:

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