【问题标题】:Multiple spaces in command CMD命令 CMD 中的多个空格
【发布时间】:2017-12-08 20:07:25
【问题描述】:

好的,所以我正在尝试按照此排序指南将十六进制文件闪存到我的 arduino pro micro 上:

https://www.reddit.com/r/MechanicalKeyboards/comments/69woay/hand_built_keypad_gateron_blues_first_hand_wire/

我真的在第 2 步苦苦挣扎。我遇到的问题是我的东西(不知道该怎么称呼它)看起来像这样:

""C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" "-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega32u4 -cavr109 -PCOM5 -b57600 -D -Uflash:wC:"\Users\My Name\Desktop\Layout\layout.hex:i""

我收到此错误:

'""C:\Program' is not recognized as an internal or external command,

可运行的程序或批处理文件。

我尝试按照这些建议修复语音标记:

How do I specify C:\Program Files without a space in it for programs that can't handle spaces in file paths?

How to use spaces in CMD?

所以这就是我可能犯了一个小错误或许多大错误的问题,但我们将不胜感激。

【问题讨论】:

  • 如果您删除第一个 " 和最后一个,这应该可以工作 - 或者至少给出一个不同的错误。
  • ... 虽然将您的 arduino 安装移动到路径不包含空格的文件夹会更容易。一直引用是很麻烦的。

标签: windows command-line cmd command-prompt


【解决方案1】:

让我们分析你的字符串

""C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" "-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega32u4 -cavr109 -PCOM5 -b57600 -D -Uflash:wC:"\Users\My Name\Desktop\Layout\layout.hex:i""

双引号“”会立即出现问题。这被解释为这两个引号之间的空字符串。从而使您的 C:\Program Files 最终出现在引号之外。

试试这个

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" "-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega32u4 -cavr109 -PCOM5 -b57600 -D -Uflash:wC:"\Users\My Name\Desktop\Layout\layout.hex:i"

【讨论】:

    【解决方案2】:

    让我们看一个更简单的例子。您可以尝试像这样运行C:\Program Files (x86)\myapp\myprogram:

    C:\Program Files (x86)\myapp\myprogram --parameter:value
    

    它不起作用,因为 CMD 所做的第一件事是按空格分割。这称为 *tokenisation`,结果是 tokens 的列表:

    • C:\Program
    • Files
    • (x86)\myapp\myprogram
    • --parameter:value

    然后它获取第一个令牌C:\Program 并尝试查找具有该名称的文件。

    'C:\Program' is not recognized as an internal or external command
    

    标记化例程关注引号。当它遇到一个引号时,它会剥离它,然后它不会将空格视为标记分隔符,直到它遇到下一个引号。

    所以:

    "C:\Program Files (x86)\myapp\myprogram" --parameter:value
    

    标记为:

    • C:\Program Files (x86)\myapp\myprogram
    • --parameter:value

    由于某些原因,在您的示例中,您在整个内容中添加了更多引号:

    ""C:\Program Files (x86)\myapp\myprogram" --parameter:value"
    

    标记化将双精度 " 视为文字 "",因此现在它标记为:

    • ""C:\Program Files
    • (x86)\myapp\myprogram
    • --parameter:value

    所以你得到一个错误,因为没有可执行文件""C:\Program Files。

    了解引用和标记化的工作原理。理解命令而不是盲目地复制它们,你应该能够解决这个问题。

    【讨论】:

    • 哇,非常感谢!很棒的答案,真的救了我的培根
    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多