【发布时间】:2019-05-14 12:15:05
【问题描述】:
我正在制作一个 Windows 批处理文件来运行 7zip 命令行来压缩一组文件。下面脚本中/C之后的部分需要根据文档引用。问题来自文件路径周围已经有双引号。我是否需要 \ 转义某些引号,使用额外的引号,单引号?我试过的都没有用。
这是/c之后的命令部分:
/c "c:\program files\data\7-zip\7z" a "c:\program files\data\backups\test1.7z" "c:\program files\data\backups\test1.txt" -mmt1
整个脚本(如果需要):
forfiles /p "c:\program files\data\backups" /m *.txt /c "c:\program files\data\7-zip\7z" a "c:\program files\data\backups\test1.7z" "c:\program files\data\backups\test1.txt" -mmt1
【问题讨论】:
-
将
"用于外部引号(整个命令行),0x22用于内部“引号”(仅forfiles专用!):`forfiles .... /c "0x22c:\文件夹\7z.exe0x22 a 0x22c:\....7z0x22 0x22c:\....txt0x22 -mmt1" -
当你不使用
@file、@path的任何变量时,为什么还要使用forfiles? -
打开命令提示符,输入
forfiles /?阅读其使用信息。您会清楚地看到/C选项后面的命令字符串应该用双引号引起来。该命令字符串本身中的任何双引号都可以替换为等效的十六进制字符串0x22,例如FORFILES /P "C:\Program Files\data\backups" /M *.txt /C "0x22C:\Program Files\data\7-zip\7z.exe0x22 a 0x22C:\Program Files\data\backups\test1.7z0x22 0x22C:\Program Files\data\backups\test1.txt0x22 -mmt1"。但是,如果从For循环运行会更有效,输入for /?以了解其用法等。 -
尝试一个简单的for 循环,例如:
for %%a in ("c:\program files\data\backups\*.txt") do echo %%a。forfiles不是那用户友好... -
forfiles是一个讨厌的野兽,因为它没有按照here 的描述正确处理/C命令行参数;所以@Stephan 使用0x22的建议可能仍然会因为那个设计缺陷而失败......
标签: windows batch-file 7zip forfiles