首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件名中的空格使用forfiles和7zip

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

Stack Overflow用户
提问于 2011-05-25 14:52:17
回答 3查看 9.1K关注 0票数 4

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

下面是看起来有效的命令:

代码语言:javascript
复制
forfiles -p%rootLogDir% -s -m*.log -d-14 -c"cmd /c 7za a -tzip """@PATH\@FILE-%date%.zip""" """@PATH\@FILE""""

请注意,7za的path和filename参数周围有3组(是的3组)引号。一组引号什么也不做,两组引号导致脚本将目录中的每个文件添加到归档中,而不是指定的文件,三组引号似乎可以工作。

有人能解释一下为什么需要这么多吗?我会认为在一盘之后其他的都是多余的,但显然我错了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-27 11:38:09

( forfiles是cmd.exe的子命令吗?如果是这样,您应该使用众多可用的(MS)窗口标签中的一个重新标记您的问题。)

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

@BugFinder的msg是合适的,我想补充说,3个dbl-quotes是“引用”单个双引号字符的一种方法。

您正在“使用”命令处理器(cmd.exe?)。您可以键入一个命令(包含一个或多个单词或操作符),即

代码语言:javascript
复制
myCommand /s /d %dir% file1 file2 > sumFile

然后按enter键。命令处理程序不仅开始执行您提交的命令,它还会扫描该行,查找特殊情况下的单词和符号,如变量名。在Unix shell中,环境变量看起来像$varName${varName}。在.bat文件%var%%%v%%中。该变量必须转换为一个值。

这只是命令处理器进行的一次传递,还有其他传递。但为了满足您的需要,cmd处理器正在扫描应该被视为一个单词的词集。如果您有一个var="one two",如果不用引号将值方括起来,则会混淆任何必须处理它的命令。它看起来像var=one .... two (单独的单词,对吗?)。

因此,如果出于某种原因,您需要将双引号字符传递到较低的处理层,则必须遵循命令处理器规则,根据需要引用内容,然后一切都会正常工作。

正如" word“是带引号的单词一样,"""也是带引号的双引号。在命令处理程序正常处理引号后,中间的双引号仍将保留在命令处理程序的命令行“视图”中(在扩展变量并遵循所有其他处理规则之后)。

呼!

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

然后是""" -> "" -> "

否,""" => "

那么为什么一句话还不够呢?

因为使用"""是让命令处理程序留下一个独立的双引号字符的一种方法,所以可以将字符保留在命令行中,并且不会爆炸。

,还是第一个精简的双引号获得了某种神奇的力量?

没有神奇的能力,请注意你的命令有一个更晚的"""s。每组都会留下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

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2011-05-25 14:59:19

一下子猜一猜,如许多“”=“”(如引号前后有两个引号)..A \“可能也足够了。

票数 1
EN

Stack Overflow用户

发布于 2019-04-26 10:43:33

所有包含空格的文件名和路径都必须用引号引起来。

接下来,关于你的问题,将路径描述如下:

代码语言:javascript
复制
start /max /d"C:\Program files\foo\" ba.exe -somearguments
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6120624

复制
相关文章

相似问题

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