gpt4 book ai didi

windows - 使用 forfiles 和 7zip 的文件名中的空格

转载 作者:可可西里 更新时间:2023-11-01 14:15:15 25 4
gpt4 key购买 nike

我正在编写一个脚本来压缩旧文件,使用 forfiles 进行循环,使用 7za 进行压缩。我一直在为如何处理文件名中的空格而苦苦挣扎,虽然我找到了一个似乎可行的解决方案,但不明白为什么我对将其部署到生产环境感到紧张。

这是似乎有效的命令:

forfiles -p%rootLogDir% -s -m*.log -d-14 -c"cmd /c 7za a -tzip """@PATH\@FILE-%date%.zip""" """@PATH\@FILE""""

请注意,7za 的路径和文件名参数有 3 组(是的,三组)引号。一组引号什么都不做,两组引号导致脚本将目录中的每个文件(而不是指定的文件)添加到存档中,而三组似乎有效。

谁能解释为什么需要这么多?我会认为在一组之后剩下的都是多余的,但显然我错了。

最佳答案

( forfiles 是一个 cmd.exe 子命令?如果是这样,您应该使用可用的许多 (MS)windows 标记之一重新标记您的问题。)

引用可能是一种令人抓狂的体验,即使对于具有丰富 shell 和 bat 脚本经验的人也是如此。

@BugFinder 的 msg 是合适的,我要补充一点,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”是一个带引号的词一样,""" 是一个带引号的双引号。在命令处理器对引号进行正常处理后,中间的双引号仍将保留在命令处理器对命令行内容的“ View ”(在扩展变量之后,并遵循所有其他处理规则顺序。)

哇哦!

所以总结一下,你在评论中写道

But then """ -> "" -> " ,

不,""" => "

so why is one quote not sufficient?

因为使用 """ 是让命令处理器留下一个独立的双引号字符保留在命令行上而不会爆炸的一种方法。

Or does the first condensed double quote gain some sort of magical power?

没有神奇的力量,请注意您的命令后面有 """。每组都留下 1 个 " 字符供以后处理。

正如@BugFinder 指出的那样,\" 可能就足够了,但我不确定您使用的是哪个命令处理器或 shell,所以我无法运行测试。

最后,根据 belisarius 写的一个很好的提醒,

请允许我欢迎您来到 StackOverflow 并提醒我们通常在这里做的三件事:1) 当您获得帮助时,也尝试提供帮助,回答您专业领域的问题 2) 阅读常见问题解答,http://tinyurl.com/2vycnvr , 3) 当您看到好的问答时,使用灰色三角形给他们投票,http://i.stack.imgur.com/kygEP.png ,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。还记得接受能更好地解决您的问题的答案(如果有的话),方法是按复选标记http://i.stack.imgur.com/uqJeW.png

希望对您有所帮助。

关于windows - 使用 forfiles 和 7zip 的文件名中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6120624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com