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

发布于 2024-11-27 14:07:15 字数 720 浏览 3 评论 0原文

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

例如,我想获取所有用户的所有 Outlook HTML 签名。我可以通过以下方式执行此操作

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

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

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

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]

is there any possibility to nest two forfile commands so that I can filter by pathname and by extension and then run a command only on those double filtered files?

By example I'd like to get all Outlook HTML-signatures of all users. I can do this by

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

But this will only display the filenames because it's the default behavior of forfiles to call cmd /c echo @file.

Changing this doesn't work because then I'd need to set the /c-option in the inner forfiles command which requires to set the command in quotes resulting in double quotes:

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

How can I escape the inner quotes or use some different approach to run any command on all files filtered by a substring of path and the file extension?

Kind regards
sc911

[edit] forgot /s for recursive searching [/edit]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

究竟谁懂我的在乎 2024-12-04 14:07:15

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

请参阅以下单行示例,在 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
  )
)  

Instead of forfiles you can use two nested FOR commands.

see the following one-liner example to test in a cmd prompt

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

and use this code as a skeleton to include in a BAT file

for /d %%d in (c:\Users\*signatures*) do (
  for %%f in (%%d\*.htm) do (
    echo %%f
  )
)  
甜心小果奶 2024-12-04 14:07:15

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

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

FORFILES seems to be able to recognise \" as the way of escaping inner ". So, the following should work:

forfiles /p c:\Users /m *Signatures* /c "cmd /c forfiles /p @path /m *.htm /c \"cmd /c echo @path\""
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文