7

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

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

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

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

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

4

2 回答 2

6

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

你可以做几个动作,

  1. 尝试传递短文件名-在连字符不在字符串右侧的某些情况下,它可能会起作用。但是,您的情况并非如此,因为它可能会翻译为STAFF-~1或类似的东西。

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

    junction staffnam "Staff - Name"
    12d.exe "staffnam/abc.4dm"
    
于 2012-05-02T08:57:51.760 回答
3

您可以尝试在批处理中添加一个^以“转义”连字符,从而使批处理忽略它。

12d.exe "C:/Staff ^- Name/abc.4dm"
于 2012-05-02T13:47:42.097 回答