【问题标题】:Batch script escape space not working批处理脚本转义空间不起作用
【发布时间】:2014-10-21 16:32:52
【问题描述】:

当我尝试运行命令时

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

在 Windows cmd.exe 中,我收到错误消息(由我翻译): 命令“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 启动但(显然)我的参数丢失了,我真的需要它们在卸载我的程序时自动删除我的证书。

我完全不熟悉批处理脚本。 有人能找到我的错误吗? 谢谢!

【问题讨论】:

    标签: batch-file escaping space


    【解决方案1】:

    cmd /?:

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

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

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

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

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

    【讨论】:

    • 谢谢!我只是没想到命令本身可能是错误的。您的第二个解决方案对我有用:D
    • 不客气。我的第一个解决方案是错误的 - 已删除!
    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多