(forfiles 是一个 cmd.exe 子命令?如果是这样,您应该使用许多可用的 (MS)windows 标签之一重新标记您的问题。)
引用可能是一种令人抓狂的体验,即使对于在 shell 和 bat 脚本方面经验丰富的人来说也是如此。
@BugFinder 的消息是合适的,我要补充一点,3 dbl-quotes 是“引用”单个双引号字符的一种方式。
您正在“使用”命令处理器 (cmd.exe?)。您键入一个命令(带有 1 个或多个单词或运算符),即
myCommand /s /d %dir% file1 file2 > sumFile
然后按回车键。命令处理器不只是开始执行您提交的命令,它扫描行,寻找特殊的单词和符号,如变量名。在 Unix shell 中,环境变量看起来像 $varName 或 ${varName}。在 .bat 文件中 %var% 或 %%v%%。该变量必须转换为值。
这只是命令处理器进行的一次传递,还有其他传递。但是为了您的需要,cmd 处理器正在扫描应该被视为一个单词的单词集。如果您有一个var="one two",则不在值侧用引号引起来会混淆任何必须处理它的命令。它看起来像var=one .... two(单独的词,对吗?)。
因此,如果由于某种原因您需要通过双引号字符传递到较低的处理层,则必须遵循命令处理器规则,根据需要引用内容,然后一切正常。
正如“word”是一个带引号的单词,""" 是一个带引号的双引号。在命令处理器对引号进行正常处理后,中间的双引号仍将保留在命令处理器对命令行内容的“视图”中(变量扩展后,所有其他处理规则的顺序都已跟随。)
哇!
所以总结一下,你在评论中写道
然后""" -> "" -> ",
不,""" => "
那么为什么一个报价是不够的呢?
因为使用""" 是让命令处理器将独立的双引号字符保留在命令行上而不会崩溃的一种方法。
或者说第一个压缩双引号获得了某种神奇的力量?
没有神奇的力量,注意你的命令有一个后来的"""s。每组留下 1 个" 字符供以后处理。
正如@BugFinder 指出的那样,\" 可能就足够了,但我不确定您使用的是哪个命令处理器或 shell,所以我无法运行测试。
最后,根据贝利撒留写的精彩提醒,
请允许我欢迎您来到 StackOverflow,并提醒我们通常在这里做的三件事:1) 当您获得帮助时,请尝试给予帮助,回答您专业领域的问题 2) 阅读常见问题解答,http://tinyurl.com/2vycnvr,3 ) 当您看到好的问答时,请使用灰色三角形 http://i.stack.imgur.com/kygEP.png 给他们投票,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。还记得通过点击复选标记http://i.stack.imgur.com/uqJeW.png
来接受更好地解决您的问题的答案(如果有)
我希望这会有所帮助。