我有个设想:
FORFILES /P "C:\users\DominiqueGerry\Work Files\" /S /M *.doc /C "cmd /c echo @fsize"给我一个错误:
错误:无效的参数/选项-“@fsize”。 输入"FORFILES /?“供人使用。
但当我移除斜杠时,它会起作用:
FORFILES /P "C:\users\DominiqueGerry\Work Files" /S /M *.doc /C "cmd /c echo @fsize"我不明白为什么没有反斜杠这是行不通的,但对它却不起作用。我找不到任何官方文件来解释这一点。甚至在运行help forfiles /?时都没有看到任何提到过的内容,我希望能在这方面提供任何帮助。
最棒的是。这一错误甚至与手头的问题无关。
发布于 2019-01-16 09:03:29
老实说,我认为官方帮助中的任何地方都没有记载(至少我没有看到),但实际发生的情况是,后面的反斜杠实际上是在逃避最后的双引号。在我看来,这其实是个错误。
错误不相关的原因很简单,因为forfiles命令检测到格式错误,原因是反斜杠转义的双引号丢失了。
当您没有双引号时,您将看到这种情况不会发生,所以让我们假设您的路径中没有空间:
FORFILES /P C:\users\DominiqueGerry\WorkFiles\ /S /M *.doc /C "cmd /c echo @fsize"不会给您一个错误,仅仅因为baskslash没有任何有效的字符可以转义,问题是,您确实在路径中有一个空格,所以您必须使用双引号。因此,最好保留双引号,而不要添加后面的反斜杠:
FORFILES /P "C:\users\DominiqueGerry\Work Files" /S /M *.doc /C "cmd /c echo @fsize"或者,如果你坚持使用反斜杠,只需通过加倍避免它。
FORFILES /P "C:\users\DominiqueGerry\Work Files\\" /S /M *.doc /C "cmd /c echo @fsize"编辑,也如@aschipfl的注释中提到的,您可以使用.
FORFILES /P "C:\users\DominiqueGerry\Work Files\." /S /M *.doc /C "cmd /c echo @fsize"发布于 2019-01-16 10:53:12
编译成可执行文件的C/C++源代码可以遵循解析C++命令行参数
Microsoft /C++启动代码在解释操作系统命令行上的参数时使用以下规则:
在C++程序中很常见。在建立上述C++参数处理之前,命令解释器就开始了它的工作。reg.exe和其他从C++源代码编译的程序通常都有这种参数处理。
forfiles.exe不是命令解释器的内置命令,因此cmd.exe的内置帮助不会告诉您外部可执行文件的行为。
正如您所发现的,您可以用反斜杠(即\" )规避双引号。这允许您在双引号(即"\"string\"" )中使用字符串中的双引号,以便参数传递给的程序保留引号。若要逃避转义,请将反斜杠(即\\ )加倍。
您收到的错误是被删除的一对双引号的一个双引号,而转义的双引号被保留,因此剩下的双引号会导致语法错误。
https://stackoverflow.com/questions/54213400
复制相似问题