批处理脚本转义空间不起作用

时间:2014-08-27 22:55:57

标签: batch-file escaping space

当我尝试运行命令

C:\Windows\system32\cmd.exe /C "C:\Program Files (x86)\TorAES\certmgr.exe" -del -c -n "Certificatename" -s -r localMachine trustedpublisher

在Windows cmd.exe中我收到errormessage(由我翻译): 命令“C:\ Program”拼写错误或不存在。

即使其他组合“不起作用:

C:\Windows\system32\cmd.exe /C 'C:\Program Files (x86)\TorAES\certmgr.exe' -del -c -n 'Certificatename' -s -r localMachine trustedpublisher
C:\Windows\system32\cmd.exe /C "'C:\Program Files (x86)\TorAES\certmgr.exe' -del -c -n 'Certificatename' -s -r localMachine trustedpublisher"
C:\Windows\system32\cmd.exe /C \"C:\Program Files (x86)\TorAES\certmgr.exe\" -del -c -n \"Certificatename\" -s -r localMachine trustedpublisher

不幸的是,如果我只是运行

C:\Windows\system32\cmd.exe /C "C:\Program Files (x86)\TorAES\certmgr.exe"

certmgr.exe启动但是(显而易见)我的参数丢失了,我真的需要它们在卸载我的程序时自动删除我的证书。

我绝对不熟悉批量编写。 有人能找到我的错误吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

请参阅cmd /?

  

如果指定了/ C或/ K,则将切换后的命令行的其余部分作为命令行处理,其中以下逻辑用于处理quote(“)字符:

     
      
  1. 如果满足以下所有条件,则会保留命令行中的引号字符:

         
        
    • 否/ S开关
    •   
    • 正好两个引号字符
    •   
    • 两个引号字符之间没有特殊字符,    special是以下之一:&<>()@ ^ |
    •   
    • 之间有一个或多个空格字符    两个引号字符
    •   
    • 两个引号字符之间的字符串是名称    可执行文件。
    •   
  2.   
  3. 否则,旧行为是查看第一个字符是否为    引用字符,如果是这样,剥去主角和    删除命令行上的最后一个引号字符,保留    最后一个引号字符后面的任何文字。

  4.   

所以你可以添加一组外部引号:

C:\Windows\system32\cmd.exe /C ""C:\Program Files (x86)\TorAES\certmgr.exe" -del -c -n "Certificatename" -s -r localMachine trustedpublisher"