首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Forfiles /P命令问题(没有记录?)

Forfiles /P命令问题(没有记录?)
EN

Stack Overflow用户
提问于 2019-01-16 08:57:18
回答 2查看 800关注 0票数 4

我有个设想:

代码语言:javascript
复制
FORFILES /P "C:\users\DominiqueGerry\Work Files\" /S /M *.doc /C "cmd /c echo @fsize"

给我一个错误:

错误:无效的参数/选项-“@fsize”。 输入"FORFILES /?“供人使用。

但当我移除斜杠时,它会起作用:

代码语言:javascript
复制
FORFILES /P "C:\users\DominiqueGerry\Work Files" /S /M *.doc /C "cmd /c echo @fsize"

我不明白为什么没有反斜杠这是行不通的,但对它却不起作用。我找不到任何官方文件来解释这一点。甚至在运行help forfiles /?时都没有看到任何提到过的内容,我希望能在这方面提供任何帮助。

最棒的是。这一错误甚至与手头的问题无关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-16 09:03:29

老实说,我认为官方帮助中的任何地方都没有记载(至少我没有看到),但实际发生的情况是,后面的反斜杠实际上是在逃避最后的双引号。在我看来,这其实是个错误。

错误不相关的原因很简单,因为forfiles命令检测到格式错误,原因是反斜杠转义的双引号丢失了。

当您没有双引号时,您将看到这种情况不会发生,所以让我们假设您的路径中没有空间:

代码语言:javascript
复制
FORFILES /P C:\users\DominiqueGerry\WorkFiles\ /S /M *.doc /C "cmd /c echo @fsize"

不会给您一个错误,仅仅因为baskslash没有任何有效的字符可以转义,问题是,您确实在路径中有一个空格,所以您必须使用双引号。因此,最好保留双引号,而不要添加后面的反斜杠:

代码语言:javascript
复制
FORFILES /P "C:\users\DominiqueGerry\Work Files" /S /M *.doc /C "cmd /c echo @fsize"

或者,如果你坚持使用反斜杠,只需通过加倍避免它。

代码语言:javascript
复制
FORFILES /P "C:\users\DominiqueGerry\Work Files\\" /S /M *.doc /C "cmd /c echo @fsize"

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

代码语言:javascript
复制
FORFILES /P "C:\users\DominiqueGerry\Work Files\." /S /M *.doc /C "cmd /c echo @fsize"
票数 5
EN

Stack Overflow用户

发布于 2019-01-16 10:53:12

编译成可执行文件的C/C++源代码可以遵循解析C++命令行参数

Microsoft /C++启动代码在解释操作系统命令行上的参数时使用以下规则:

  • 参数由空白分隔,空白是空格或制表符。
  • 插入字符(^)不被识别为转义字符或分隔符。该字符在传递给程序中的argv数组之前,完全由操作系统中的命令行解析器处理。
  • 被双引号(" string ")包围的字符串被解释为单个参数,而不考虑包含在其中的空格。引用的字符串可以嵌入到参数中。
  • 前加反斜杠(\")的双引号被解释为文字双引号字符(")。
  • 反斜杠是按字面解释的,除非它们紧跟在双引号之前。
  • 如果反斜杠的偶数后面跟着双引号,则每对反斜杠都会在argv数组中放置一个反斜杠,并将双引号解释为字符串分隔符。
  • 如果一个奇数反斜杠后面跟着一个双引号,则为每对反斜杠在argv数组中放置一个反斜杠,而双引号由其余反斜杠“转义”,导致一个文字双引号(")被放置在argv中。

在C++程序中很常见。在建立上述C++参数处理之前,命令解释器就开始了它的工作。reg.exe和其他从C++源代码编译的程序通常都有这种参数处理。

forfiles.exe不是命令解释器的内置命令,因此cmd.exe的内置帮助不会告诉您外部可执行文件的行为。

正如您所发现的,您可以用反斜杠(即\" )规避双引号。这允许您在双引号(即"\"string\"" )中使用字符串中的双引号,以便参数传递给的程序保留引号。若要逃避转义,请将反斜杠(即\\ )加倍。

您收到的错误是被删除的一对双引号的一个双引号,而转义的双引号被保留,因此剩下的双引号会导致语法错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54213400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档