命令CMD中有多个空格

时间:2017-07-05 08:54:22

标签: windows command-line cmd command-prompt

好的,所以我想按照这个分类指南在我的arduino pro micro上刷一个hex文件:

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?

所以这就是我可能犯了一个小错误或许多重大错误的问题,但是你会非常感激。

2 个答案:

答案 0 :(得分:2)

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

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

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

  • 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

Tokenises to:

  • 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而导致错误。

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

答案 1 :(得分: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"