Forfiles /P 命令问题(未记录?)

Ger*_*rry 4 batch-file

我有一个场景:

FORFILES /P "C:\users\DominiqueGerry\Work Files\" /S /M *.doc /C "cmd /c echo @fsize"
Run Code Online (Sandbox Code Playgroud)

给我一个错误:

错误:无效的参数/选项 - '@fsize'。

输入“FORFILES /?” 供使用。

但是当我删除斜线时,它就起作用了:

FORFILES /P "C:\users\DominiqueGerry\Work Files" /S /M *.doc /C "cmd /c echo @fsize"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在没有反斜杠的情况下这不起作用,但在有反斜杠的情况下却不起作用。我找不到任何解释这一点的官方文档。并且在运行帮助时甚至没有看到任何提到的内容,forfiles /?我将不胜感激。

最好的部分是。该错误甚至与当前的问题无关。

Ger*_*ard 6

老实说,我认为官方帮助中没有记录(至少没有我所看到的),但实际发生的情况是尾随反斜杠实际上转义了最后一个双引号。在我看来,这实际上是一个错误。

错误不相关的原因只是因为forfiles命令检测到格式错误,由于缺少双引号,反斜杠转义了双引号。

您会发现,当您没有双引号时,这种情况不会发生,因此我们假设您的路径中没有空格:

FORFILES /P C:\users\DominiqueGerry\WorkFiles\ /S /M *.doc /C "cmd /c echo @fsize"
Run Code Online (Sandbox Code Playgroud)

不会给你一个错误,只是因为 baskslash 没有任何有效的字符来转义,问题是,你的路径中有一个空格,所以你必须使用双引号。因此最好保留双引号并且不要添加尾部反斜杠:

FORFILES /P "C:\users\DominiqueGerry\Work Files" /S /M *.doc /C "cmd /c echo @fsize"
Run Code Online (Sandbox Code Playgroud)

或者,如果您坚持使用反斜杠,只需通过加倍来逃避它即可。

FORFILES /P "C:\users\DominiqueGerry\Work Files\\" /S /M *.doc /C "cmd /c echo @fsize"
Run Code Online (Sandbox Code Playgroud)

编辑,也如@aschipfl的评论中提到的,您可以使用.

FORFILES /P "C:\users\DominiqueGerry\Work Files\." /S /M *.doc /C "cmd /c echo @fsize"
Run Code Online (Sandbox Code Playgroud)

  • @GerhardBarnard你是对的,微软的[forfiles](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/forfiles)文档应该解释`forfiles`对反斜杠的特殊解析。我已经请求更正此官方页面示例中的错误,并且我可能还请求扩展以解释“forfiles”对所有参数字符串中反斜杠的特殊解析。[reg add](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-add) 文档还需要有关 ``\`` 解析的扩展。 (3认同)