传递包含连字符的命令行参数

时间:2012-05-01 23:08:15

标签: windows command-line batch-file

我正在尝试将命令行参数传递给控制台应用程序(计算机语言编译器)。

我的问题:我传递的参数包含一个连字符字符,它会导致错误“ - 是意外的命令/字符”。

这是我正在使用的命令行参数(12d.exe是应用程序/编译器):

12d.exe "C:/Staff - Name/abc.4dm"

它似乎将' - '视为命令而不是目录/字符串的一部分。也许我可以使用批处理文件来执行此命令行并重新格式化目录路径?你知道在HTTP POST中我可以使用urlencode格式化post命令,也许我可以在批处理文件中对命令行进行编码。

2 个答案:

答案 0 :(得分:4)

似乎12d.exe无法理解一些有效的文件名,对12d.exe感到羞耻。

您可能会采取一些措施,

  1. 尝试传递短文件名。它可能适用于连字符-位于字符串右侧的某些情况。但不是在你的情况下,因为它可能会转换为STAFF-~1或类似的东西。

    call :invoke12d "Staff - Name\abc.4dm"
    goto :eof
    :invoke12d
    12d %~s1
    goto :eof
    
  2. 或创建一个联结,一个符号链接,用另一个不包含连字符的名称调用该目录。有关详细信息,请参阅此http://technet.microsoft.com/en-us/sysinternals/bb896768并下载一个简单的工具。

    junction staffnam "Staff - Name"
    12d.exe "staffnam/abc.4dm"
    

答案 1 :(得分:3)

您可以尝试添加^来“转义”批处理批处理中的连字符忽略它。

12d.exe "C:/Staff ^- Name/abc.4dm"