Windows 批处理文件:当命令本身需要引号时,如何将命令双引号/C

Windows 批处理文件:当命令本身需要引号时,如何将命令双引号/C,windows,batch-file,7zip,forfiles,Windows,Batch File,7zip,Forfiles,我正在制作一个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

我正在制作一个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 /s /m *.ext /c "cmd /c \"\"C:\Program Files\Blah\blah-blah-blah.exe\" -o1 --option2 /option3 @file\"" >%~n0.log 2>&1

相当棘手,但它的工作

使用
作为外部引号(整个命令行),使用
0x22
作为内部引号(仅限于
forfiles
):`forfiles../c“0x22c:\folder\7z.ex0x22 a 0x22c:\..7z0x22 0x22c:\..txt0x22-mmt1“如果不使用其任何变量
@file
@path
,为什么要使用
for files
?打开命令提示符,输入
for files/?
读取其使用信息。您将清楚地看到,
/C
选项后面的命令字符串应该是双引号。该命令字符串本身中的任何双引号都可以替换为其等效十六进制字符串,
0x22
,例如
FORFILES/P“C:\Program Files\data\Backup”/M*.txt/C“0x22C:\Program Files\data\7-zip\7z.EXE22 0x22a 0x22C:\Program Files\data\Backup\test1.7z0x22 0x22C:\Program Files\data\Backup\test1.TX0x22-mmt1”
。但是,如果从
For
循环运行会更有效,请输入
For/?
了解其用法等。尝试一个简单的循环,例如:
For%%a in(“c:\program files\data\Backup\*.txt”)do echo%%a
forfiles
不是那么友好的…
forfiles
是一个讨厌的野兽,因为它没有按照描述正确地处理
/C
命令行参数;因此@Stephan建议使用
0x22
可能仍然会因为设计缺陷而失败……你对我来说是个救命恩人,谢谢你,它起作用了!在回显0x22时,使用0x22的建议看起来是正确的,但是最终的命令仍然会由于未知的原因丢失双引号,但是使用
\“
是这里的关键。
@FORFILES /s /m *.ext /c "cmd /c \"\"C:\Program Files\Blah\blah-blah-blah.exe\" -o1 --option2 /option3 @file\"" >%~n0.log 2>&1