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

Windows 传递包含连字符的命令行参数,windows,command-line,batch-file,Windows,Command Line,Batch File,我试图将命令行参数传递给控制台应用程序(计算机语言编译器) 我的问题:我传递的参数包含连字符,它导致了一个错误“-was unexpected command/character” 这是我正在使用的命令行参数(12d.exe是应用程序/编译器): 它似乎将“-”视为命令,而不是目录/字符串的一部分。也许我可以使用批处理文件来执行此命令行并重新格式化目录路径?你知道在HTTP POST中我是如何使用urlencode来格式化POST命令的,也许我可以在批处理文件中对命令行进行编码。似乎12d.ex

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

我的问题:我传递的参数包含连字符,它导致了一个错误“-was unexpected command/character”

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


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

似乎12d.exe不理解一些有效的文件名,12d.exe真丢脸

你可能会做一些动作

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

    call :invoke12d "Staff - Name\abc.4dm"
    goto :eof
    :invoke12d
    12d %~s1
    goto :eof
    
  • 或者创建一个连接,一个符号链接,用另一个不包含连字符的名称调用目录。有关更多信息和下载一个简单工具,请参见此

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

  • 您可以尝试添加一个
    ^
    来“转义”批中的连字符,使批忽略它

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

    1.离题。2.这完全取决于12d.exe内部的内容,您无法从外部执行任何操作。@b您说得对,它取决于12d.exe。你说得不对,因为总有一些事情要从外部来做。你有没有试着在argv变量中打印字符串?那么您实际上是如何解析命令行的呢?
    12d.exe "C:/Staff ^- Name/abc.4dm"